有没有办法用GDB在代码的每一行设置断点?显然我不希望每一行都按b *addr
,所以我想知道是否有快速的方法来做到这一点。
修改 请注意,我正在运行由其他人创建的二进制文件,但我无法访问源代码。不幸的是,该二进制文件尚未使用-g标志进行编译。因此,我不能单步执行代码中的每一行。
进一步修改
正如Jason在下面指出的那样,只要您使用si
或ni
,就可以单步执行代码,而不仅仅是s
(步骤)或n
(下一个)。 n
或s
可以正常工作,如果源代码是使用-g编译的,但它会逐步执行源代码行,而不是逐步执行每个汇编指令,例如ni
或si
在没有-g。
答案 0 :(得分:7)
使用si
(stepi
)指导代码。您可以使用ni
(nexti
)来跳过您不感兴趣的库函数。如果您不小心插入其中一个函数,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