【问题标题】:How to let GDB continue until the program enters another function?如何让 GDB 继续运行,直到程序进入另一个函数?
【发布时间】:2013-01-19 14:41:00
【问题描述】:

假设我在 A() 中,A() 调用 B()。我刚刚输入了 A(),我希望程序运行直到我进入 B()。它不必是特定的函数 B()。我只想让我的程序在进入新功能时暂停。有没有办法做到这一点?

【问题讨论】:

    标签: c++ c debugging gdb


    【解决方案1】:

    对于电话,如在:List of all function calls made in an application 中提到的:

    set confirm off
    rbreak .
    

    rbreak 为每个匹配给定正则表达式的函数设置断点,. 匹配所有函数。

    对于具有大量功能的大型可执行文件,此命令可能需要一段时间才能运行。但是一旦完成,运行时就会很高效。

    退出比较棘手,因为我们无法在编译时知道我们将登陆的位置:How to set a breakpoint in GDB where the function returns?

    How to break on instruction with a specific opcode in GDB?,我还提供了一个脚本,该脚本可以单步执行,直到找到所需的指令,您可以使用它来查找callq。那个的好处是不会让你等待一个大的可执行文件,但是执行会很慢,所以目标不会很远。

    【讨论】:

      【解决方案2】:

      call 指令上设置断点会是一个很好的解决方案,但是as this answer states 没有办法做到这一点。

      我认为,最简单的解决方案是手动设置断点或尝试write a script in Python,它会在当前函数列表中找到函数调用并设置所需的断点。

      【讨论】:

      猜你喜欢
      • 2011-01-01
      • 2016-01-19
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      相关资源
      最近更新 更多