【发布时间】:2016-07-16 20:02:46
【问题描述】:
我知道如何在特定行设置断点(所以我可以在第 1 行设置断点) 或者我也可以这样做:
break main(在进入主程序时设置断点)
但是在进入某个函数或主程序之前如何设置断点呢?
如果有人有时间的话。如何在特定断点处开始执行 gdb 程序(例如,如果我在第 7 行设置断点)。
【问题讨论】:
标签: gdb breakpoints point break
我知道如何在特定行设置断点(所以我可以在第 1 行设置断点) 或者我也可以这样做:
break main(在进入主程序时设置断点)
但是在进入某个函数或主程序之前如何设置断点呢?
如果有人有时间的话。如何在特定断点处开始执行 gdb 程序(例如,如果我在第 7 行设置断点)。
【问题讨论】:
标签: gdb breakpoints point break
没有命令 (AFAIK) 可以在某个特定函数的所有调用上放置断点(可能存在多个调用函数的位置,包括虚函数、函数指针,gdb 甚至无法发现)。
在main之前如何启动已经多次解释,包括here。然后你可以升级到 main。
一般来说,您为什么要在输入函数之前停止?区别仅在于参数设置/堆栈。你在函数启动时设置一个断点,然后移动到上面的框架(“up”命令)并检查它,就好像函数还没有被调用一样。
同样,如果没有正确设置局部变量/寄存器/参数,在代码中的某个随机点恢复执行也没有多大意义*。您可以执行一个函数(使用“call”命令)。这确实有道理。
(*) 有可能,但是如果你没有正确设置上下文,你会崩溃。做“信息中断”。这将为您提供一个插入断点的地址(假设它是 0x00000000004005ea。然后将您的 PC 设置为该地址(在 x86-64 上将是“set $rip = 0x00000000004005ea”),设置您的堆栈、寄存器等然后“继续”。
【讨论】: