相关疑难解决方法(0)

gdb脚本:在选定的断点处执行命令

我想在gdb脚本中预定义一些断点,并在这些断点处调用一些特殊命令,然后自动继续执行程序.所以,理想情况下,我想要一个像下面这样的gdb脚本:

b someFunction
...
if breakpoint from above reached do:
  print var1
  call someOtherFunction
  continue
done
Run Code Online (Sandbox Code Playgroud)

另外一个不幸的事实是,我不能依赖python接口来使用断点,因为我目前工作的服务器上的gdb版本太旧了!

scripting gdb breakpoints

33
推荐指数
1
解决办法
2万
查看次数

如何在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)

c debugging automation gdb

26
推荐指数
2
解决办法
1万
查看次数

如何从文件中读取和执行GDB命令?

我在目标文件(例如)上运行GDB,我想根据几个命令检查它.如何根据文件中的行执行这些命令(而不是输入每个运行的GDN)?exeFile

例如 - 我想设置中断 -

break *0x8048e19
break *0x8048e32
break *0x8048e6f
break *0x8048e90
Run Code Online (Sandbox Code Playgroud)

所以我想将它们保存在一个文件中然后告诉GDB从这个文件中执行它们.

gdb gnu disassembly

22
推荐指数
1
解决办法
3万
查看次数

如何编写将崩溃并生成转储文件的示例代码?

我开始学习windbg并找到了这篇好文章 如何使用WinDbg来分析VC++应用程序的崩溃转储?

现在我想按照说明一步一步地做.这是问题所在:我需要编写一些可以立即崩溃的示例代码,并创建一些可以由windbg使用的转储文件.

怎么写这样的代码?

void Example4()
{
    int* i = NULL;
    *i = 80;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会立即崩溃; 但是,我不知道在哪里可以找到转储文件?

谢谢

c++ windbg visual-c++

16
推荐指数
1
解决办法
2万
查看次数

自动化gdb:在每次调用函数put时显示回溯

我想调试一些程序.我需要从一些函数的所有调用中回溯,例如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)

如何在脚本中为库调用设置断点?

gdb

12
推荐指数
1
解决办法
7695
查看次数

为GDB编写前端

我想编写一个基于GUI的调试器包装在GDB上.因为,我不希望程序在观察点或断点后停止.相反,它应该将文件名,行号,新值和填充等详细信息重定向到文件并继续执行.

我在编写脚本方面非常糟糕.所以,我想要一些起点开始为GDB开发前端.据我搜索,这个链接http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_211.html对于这项活动的初学者来说是不是很容易理解?

希望我能在C/C++中获得开发方面的帮助.

user-interface frontend gdb

9
推荐指数
1
解决办法
5405
查看次数

如何在GDB中多次重新运行程序?

我有一个程序偶尔会失败,但有同样的错误.为了调试它,我想在GDB下运行它,直到它失败,设置断点并重新运行它.我该怎么办:

gdb --args /path/to/program <program args>
Run Code Online (Sandbox Code Playgroud)

但我无法在任何地方找到如何告诉GDB"运行此程序100次".

debugging gdb

9
推荐指数
2
解决办法
4393
查看次数

自动化GDB在特定断点处打印堆栈帧

是否可以将gdb附加到正在运行的进程的PID上,并且每次程序命中特定断点时gdb都会将堆栈输出到外部文件?

我看了一眼这个这个,但没有就是否有可能GDB附加到一个已经运行的进程没有提及(而不是让GDB启动它).

我可以将gdb附加到PID就好了,但是我想自动运行它bt,将输出存储在外部文件中然后运行continue.目前我正在手动执行此操作,每次遇到断点时我都必须这样做.

c gdb

8
推荐指数
2
解决办法
3203
查看次数