如何防止GDB进入每个函数

4

我的GDB调试器自动步进到大多数函数(特别是我的外部库、标准库)。这非常让人烦恼,因为我知道那些库比我的代码写得更好。 有什么方法可以阻止GDB这样做吗?


gdb调试器自动进入大多数函数是什么意思? - Pawan
当我输入“continue”时,gdb以前会跳到下一行。但现在(因为我使用Linux),即使是来自外部库的函数,它也会步入其中。例如,在调试string str =“foo”;时,gdb会进入string.h中的函数。 - Arkhan
2
continue并不会跳到下一行,而是next才会。你可能正在使用step而不是next - Ismail Badawi
抱歉,我是指“下一个”。 - Arkhan
1个回答

5
有两种方式可以获得你想要的结果。
一种是使用 "next" 而不是 "step"。 "step" 会进入一个函数调用,但 "next" 会跳过它。选择下一个步骤命令是处理此问题最常见的方法。
现在,这并不总是完全符合您的需求。特别是,您可能在一个包含多个调用的行上,而其中有一些子集您总是想跳过。这在 C++ 中很典型,因为经常有许多微小的访问器和微不足道的构造函数,实际上并不重要 - 但您必须费力地逐个跨过它们才能进入您真正关心的调用中。
对于这种更复杂的场景,GDB 有 "skip" 命令。它可以用于“黑名单”某些功能(或整个文件)。当一个函数被列入黑名单时,“step” 将不会进入它。请参阅手册了解如何使用 "skip" 的更多详细信息。
最后一种非常重的达到相同效果的方式是确保您没有任何您不想调试的库的调试信息。如果没有调试信息,GDB 将自动不会进入函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接