我有一些这样的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上设置断点并使用继续前进到它.