防止GDB进入函数(或文件)

Jus*_* L. 25 gdb

我有一些这样的C++代码,我正在使用GDB:

void foo(int num) { ... }

void main() {
  Baz baz;
  foo (baz.get());
}
Run Code Online (Sandbox Code Playgroud)

当我进去时main(),我想介入foo(),但我想要跳过去 baz.get().

GDB文档说,"如果有一个函数行号信息的步骤命令只进入功能",所以我会很高兴,如果我能删除行号信息,baz.get()从我的可执行文件.但理想情况下,我可以告诉GDB"永远不会进入Baz类的任何功能".

有谁知道如何做到这一点?

Jus*_* L. 20

从GDB 7.4开始,skip可以使用.

运行info skip或查看手册以获取详细信息:https://sourceware.org/gdb/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html


Nic*_*tin 12

您可以使用"until"命令通常按照您希望的方式运行,而不是选择"步进":

(gdb) until foo
Run Code Online (Sandbox Code Playgroud)

我不知道有什么方法可以永久配置gdb来跳过某些符号(除了忽略它们的调试信息).

编辑:实际上,GDB文档声明您不能使用直到跳转到不在同一帧中的位置.我不认为这是真的,但如果是这样的话,你可以将advance用于同样的目的:

(gdb) advance foo
Run Code Online (Sandbox Code Playgroud)

GDB手册的第85页定义了可以用作获取它们的命令的"位置"参数的内容.只要输入"foo"就可以找到一个名为foo的函数,所以只要它能找到它,你应该没问题.或者,你会忘记键入文件名:linenum for foo,在这种情况下你可能最好不要在foo上设置断点并使用继续前进到它.