【问题标题】:Can I use gdb to skip a line without having to type line numbers?我可以使用 gdb 跳过一行而不必输入行号吗?
【发布时间】:2011-05-01 12:57:59
【问题描述】:

我知道我可以使用jump 将程序计数器设置为特定行,这样我就可以跳过一行或多行(或再次执行一些行)。我可以轻松跳过下一行而无需输入行号吗?

这将非常方便在运行时“注释掉”某些内容。

【问题讨论】:

标签: gdb


【解决方案1】:
jump +1

跳到下一行,即跳过当前行。您可能还想将它与tbreak +1 结合起来在跳转目标处设置一个临时断点。

请参阅http://sourceware.org/gdb/current/onlinedocs/gdb/Specify-Location.html 了解更多使用 gdb 表示位置的方法。

请注意,没有断点gdb 很可能会继续正常执行而不是跳转。因此,如果跳跃似乎不起作用,请确保在目的地设置断点。

【讨论】:

  • 很明显,但是谢谢!使用带有 Debugger Command 的断点在 Xcode 中运行良好。
  • 应该注意,这在 LLDB 中也有效。 :)
  • 如果你直接在asm中工作,你可以通过发出j addr跳转到你想要的指令,其中addr是你想要跳转到的地址。
  • 请注意,如果您使用-O0 编译,这只会作为源级跳过工作。任何优化都会让跳过不安全。
【解决方案2】:

我的.gdbinit 配置文件中有以下内容:

define skip
    tbreak +1
    jump +1
end

所以只需在 gdb 中输入 skip 即可跳过一行。

【讨论】:

  • 如何将其参数化为“skip(N)”?
  • @p2rkw。您可以将“1”替换为 $arg0,如下所述:sourceware.org/gdb/onlinedocs/gdb/Define.html。请注意,我不会再使用名称“skip”,因为它变成了 GDB 函数(允许在单步执行代码时跳过源文件)。
  • @Trass3r 是的。我在上面的评论中提到了这一点。
【解决方案3】:

在执行期间跳过任意行数:

[Current Position -- in GDB] Line N
.......... // Lines To Skip
..........
..........
[Line To Execute - After Jumping] Line M

在 M 行设置断点:

gdb$b M

跳到 M 行:

gdb$jump M

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多