我想在gdb脚本中预定义一些断点,并在这些断点处调用一些特殊命令,然后自动继续执行程序.所以,理想情况下,我想要一个像下面这样的gdb脚本:
b someFunction
...
if breakpoint from above reached do:
print var1
call someOtherFunction
continue
done
Run Code Online (Sandbox Code Playgroud)
另外一个不幸的事实是,我不能依赖python接口来使用断点,因为我目前工作的服务器上的gdb版本太旧了!
我希望能够在GDB中设置一个断点,让它运行到那一点 - 并在此过程中,打印出已经"逐步完成"的行.
这是一个例子,基于这个带有a main和a函数的简单文件,每个都有两个断点:
$ cat > test.c <<EOF
#include "stdio.h"
int count=0;
void doFunction(void) {
// two steps forward
count += 2;
// one step back
count--;
}
int main(void) {
// some pointless init commands;
count = 1;
count += 2;
count = 0;
//main loop
while(1) {
doFunction();
printf("%d\n", count);
}
}
EOF
$ gcc -g -Wall test.c -o test.exe
$ chmod +x test.exe
$ gdb -se test.exe
...
Reading symbols from /path/to/test.exe...done.
(gdb) b …Run Code Online (Sandbox Code Playgroud) 我在目标文件(例如)上运行GDB,我想根据几个命令检查它.如何根据文件中的行执行这些命令(而不是输入每个运行的GDN)?exeFile
例如 - 我想设置中断 -
break *0x8048e19
break *0x8048e32
break *0x8048e6f
break *0x8048e90
Run Code Online (Sandbox Code Playgroud)
所以我想将它们保存在一个文件中然后告诉GDB从这个文件中执行它们.
我开始学习windbg并找到了这篇好文章 如何使用WinDbg来分析VC++应用程序的崩溃转储?
现在我想按照说明一步一步地做.这是问题所在:我需要编写一些可以立即崩溃的示例代码,并创建一些可以由windbg使用的转储文件.
怎么写这样的代码?
void Example4()
{
int* i = NULL;
*i = 80;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会立即崩溃; 但是,我不知道在哪里可以找到转储文件?
谢谢
我想调试一些程序.我需要从一些函数的所有调用中回溯,例如puts.
现在我使用这样的gdb script:
set width 0
set height 0
set verbose off
break puts
commands 1
backtrace
continue
end
Run Code Online (Sandbox Code Playgroud)
但是开始吧
gdb --batch --command=script --args ./some_program arguments
Run Code Online (Sandbox Code Playgroud)
给出错误:
Function "puts" not defined.
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
/root/script:5: Error in sourced command file:
No breakpoint number 1.
Run Code Online (Sandbox Code Playgroud)
如何在脚本中为库调用设置断点?
我想编写一个基于GUI的调试器包装在GDB上.因为,我不希望程序在观察点或断点后停止.相反,它应该将文件名,行号,新值和填充等详细信息重定向到文件并继续执行.
我在编写脚本方面非常糟糕.所以,我想要一些起点开始为GDB开发前端.据我搜索,这个链接http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_211.html对于这项活动的初学者来说是不是很容易理解?
希望我能在C/C++中获得开发方面的帮助.
我有一个程序偶尔会失败,但有同样的错误.为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行它.我该怎么办:
gdb --args /path/to/program <program args>
Run Code Online (Sandbox Code Playgroud)
但我无法在任何地方找到如何告诉GDB"运行此程序100次".
gdb ×7
c ×2
debugging ×2
automation ×1
breakpoints ×1
c++ ×1
disassembly ×1
frontend ×1
gnu ×1
scripting ×1
visual-c++ ×1
windbg ×1