在GDB的每一行上设置断点

时间:2012-11-16 05:21:30

标签: gdb

有没有办法用GDB在代码的每一行设置断点?显然我不希望每一行都按b *addr,所以我想知道是否有快速的方法来做到这一点。

修改 请注意,我正在运行由其他人创建的二进制文件,但我无法访问源代码。不幸的是,该二进制文件尚未使用-g标志进行编译。因此,我不能单步执行代码中的每一行。

进一步修改 正如Jason在下面指出的那样,只要您使用sini,就可以单步执行代码,而不仅仅是s(步骤)或n (下一个)。 ns可以正常工作,如果源代码是使用-g编译的,但它会逐步执行源代码行,而不是逐步执行每个汇编指令,例如nisi在没有-g。

编译的二进制文件中执行

3 个答案:

答案 0 :(得分:7)

使用sistepi)指导代码。您可以使用ninexti)来跳过您不感兴趣的库函数。如果您不小心插入其中一个函数,finish应该会让您回到原来的例行程序。在这个级别工作的人通常将gdb设置为显示将要执行的下几个指令,例如, disp/3i $pc

答案 1 :(得分:1)

难道你不能将断点放在第一行执行上,然后逐步执行每一行吗?这取决于您通过在每一行上设置断点来实现的目标。如果要评估表达式,可以按照我的逻辑(逐步执行每一行)来完成。

答案 2 :(得分:0)

PowerPC对远程断点提供硬件支持,GCB提供:

break-range start end

在那个拱门里。所以我认为你可以打破整个内存地址或整个文本部分(未经测试)。

该命令在x86上失败。

Doc:https://sourceware.org/gdb/onlinedocs/gdb.html#index-break_002drange-1548