【问题标题】:How do I set a break point to stop before entering the main program (or function) (GDB)如何在进入主程序(或函数)(GDB)之前设置断点停止
【发布时间】:2016-07-16 20:02:46
【问题描述】:

我知道如何在特定行设置断点(所以我可以在第 1 行设置断点) 或者我也可以这样做:

break main(在进入主程序时设置断点)

但是在进入某个函数或主程序之前如何设置断点呢?

如果有人有时间的话。如何在特定断点处开始执行 gdb 程序(例如,如果我在第 7 行设置断点)。

【问题讨论】:

    标签: gdb breakpoints point break


    【解决方案1】:

    没有命令 (AFAIK) 可以在某个特定函数的所有调用上放置断点(可能存在多个调用函数的位置,包括虚函数、函数指针,gdb 甚至无法发现)。

    在main之前如何启动已经多次解释,包括here。然后你可以升级到 main。

    一般来说,您为什么要在输入函数之前停止?区别仅在于参数设置/堆栈。你在函数启动时设置一个断点,然后移动到上面的框架(“up”命令)并检查它,就好像函数还没有被调用一样。

    同样,如果没有正确设置局部变量/寄存器/参数,在代码中的某个随机点恢复执行也没有多大意义*。您可以执行一个函数(使用“call”命令)。这确实有道理。

    (*) 有可能,但是如果你没有正确设置上下文,你会崩溃。做“信息中断”。这将为您提供一个插入断点的地址(假设它是 0x00000000004005ea。然后将您的 PC 设置为该地址(在 x86-64 上将是“set $rip = 0x00000000004005ea”),设置您的堆栈、寄存器等然后“继续”。

    【讨论】:

    • 我目前正在准备考试,这是过去考试中逐字逐句的问题。我知道这个问题有点奇怪。在进入主程序(或函数..等)之前,我没有介绍过设置断点的学习材料,所以我想知道我是否遗漏了什么。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2013-07-20
    • 2013-07-07
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多