【发布时间】:2013-01-19 14:41:00
【问题描述】:
假设我在 A() 中,A() 调用 B()。我刚刚输入了 A(),我希望程序运行直到我进入 B()。它不必是特定的函数 B()。我只想让我的程序在进入新功能时暂停。有没有办法做到这一点?
【问题讨论】:
假设我在 A() 中,A() 调用 B()。我刚刚输入了 A(),我希望程序运行直到我进入 B()。它不必是特定的函数 B()。我只想让我的程序在进入新功能时暂停。有没有办法做到这一点?
【问题讨论】:
对于电话,如在: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。那个的好处是不会让你等待一个大的可执行文件,但是执行会很慢,所以目标不会很远。
【讨论】:
在call 指令上设置断点会是一个很好的解决方案,但是as this answer states 没有办法做到这一点。
我认为,最简单的解决方案是手动设置断点或尝试write a script in Python,它会在当前函数列表中找到函数调用并设置所需的断点。
【讨论】:
rbreak . 有一个更有效的解决方案@:stackoverflow.com/a/31249717/895245