【问题标题】:How to prevent GDB from stepping into every single function如何防止 GDB 进入每一个函数
【发布时间】:2015-07-31 17:51:23
【问题描述】:

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

【问题讨论】:

  • gdb debugger automatically steps into most functions 是什么意思?
  • 当我输入“继续”时,gdb 会转到下一行。但是现在(因为我使用 Linux),它可以进入任何函数,即使它来自外部库。例如,在调试string str = "foo";时,gdb会进入string.h中的函数。
  • continue 不会转到下一行,next 会。您可能正在使用step 而不是next
  • 对不起,我的意思是next

标签: debugging gdb


【解决方案1】:

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

一种是使用next 而不是stepstep 将进入函数调用,但 next 将跳过它。选择下一步要使用的步进命令是迄今为止处理此问题的最常用方法。

现在,这并不总是您想要的。特别是,您可能在一条线路上有许多呼叫,并且您总是希望跳过某些呼叫子集。这在 C++ 中很典型,其中通常有许多微小的访问器和微不足道的构造函数,它们本质上是无趣的——但您仍然必须费力地逐步完成每一个才能进入您真正关心的调用。

对于这个更复杂的场景,GDB 有skip 命令。这可用于将某些功能(或整个文件)“列入黑名单”。当函数被列入黑名单时,step 将不会介入。有关如何使用skip 的更多详细信息,请参阅手册。

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

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 2012-10-20
    • 2021-07-16
    • 2017-08-02
    • 2010-11-11
    • 1970-01-01
    • 2013-01-19
    • 2016-09-25
    相关资源
    最近更新 更多