9

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

编辑 请注意,我正在运行由其他人创建的二进制文件,并且我无权访问源代码。不幸的是,该二进制文件没有使用 -g 标志编译。因此,我不能只单步执行代码中的每一行。

进一步编辑 正如 Jason 在下面指出的那样,只要您使用sior ni,您确实可以单步执行代码,而不仅仅是简单地s(step) 或n(next)。n但是,如果源代码是使用 -g 编译的,或者s工作正常,但它会逐步执行源代码行,而不是像在没有 -g 的情况下编译的二进制文件中那样逐步执行每个汇编指令nisido。

4

3 回答 3

7

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

于 2012-11-16T07:16:13.360 回答
1

您不能将断点放在执行的第一行,然后单步执行每一行吗?这取决于你试图通过在每一行上设置断点来实现什么。如果你想计算表达式,你可以按照我的逻辑来做(逐行遍历)。

于 2012-11-16T05:30:21.397 回答
0

PowerPC 具有对范围断点的硬件支持,而 GCB 提供:

break-range start end

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

该命令在 x86 上失败。

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

于 2015-07-27T16:08:38.940 回答