Debugging 如何防止GDB介入每一项功能

Debugging 如何防止GDB介入每一项功能,debugging,gdb,Debugging,Gdb,我的GDB调试器自动进入大多数函数(特别是我的外部库,标准库)。这很烦人,因为我知道这些库的编写要比我的代码好得多。 如何防止GDB这样做?有两种方法可以得到您想要的 一种是使用next而不是step步骤将单步执行函数调用,但下一步将单步执行。选择下一步要使用的步进命令是迄今为止处理此问题最常用的方法 现在,这并不总是你想要的。特别是,您可能在一条有许多呼叫的线路上,并且有一些呼叫的子集您总是想跳过。在C++中,这是典型的,通常有许多小的访问器和琐碎的构造器,它们本质上是没有意思的,但是你必须费

我的GDB调试器自动进入大多数函数(特别是我的外部库,标准库)。这很烦人,因为我知道这些库的编写要比我的代码好得多。
如何防止GDB这样做?

有两种方法可以得到您想要的

一种是使用
next
而不是
step
<代码>步骤将单步执行函数调用,但
下一步
将单步执行。选择下一步要使用的步进命令是迄今为止处理此问题最常用的方法

现在,这并不总是你想要的。特别是,您可能在一条有许多呼叫的线路上,并且有一些呼叫的子集您总是想跳过。在C++中,这是典型的,通常有许多小的访问器和琐碎的构造器,它们本质上是没有意思的,但是你必须费力地跨过每一个来进入你关心的调用。 对于这个更复杂的场景,GDB有
skip
命令。这可用于“黑名单”某些功能(或整个文件)。当某个函数被列入黑名单时,
步骤
将不会进入该函数。有关如何使用
skip
的更多详细信息,请参阅手册


实现相同效果的最后一个非常重要的方法是确保没有任何不想调试的库的调试信息。GDB不会自动进入没有调试信息的函数。

您所说的
GDB调试器自动进入大多数函数是什么意思?
?当我键入“continue”时,GDB通常会进入下一行。但现在(因为我使用Linux),它会进入任何函数,即使它来自外部库。例如,调试
string str=“foo”
gdb步进
string.h中的函数
continue
不转到下一行,
next
转到下一行。您可能正在执行
步骤
而不是
下一步
。对不起,我的意思是
下一步