如何跳转到lldb中的特定源代码行?在gdb中它将是“跳转X”,其中X是行号,但我能找到的唯一引用为lldb的是http://lldb.llvm.org/lldb-gdb.html,其中说:
在当前程序计数器之前跳过8个字节(指令 指针)。请注意,我们使用反引号来评估表达式 将标量结果插入LLDB。
(gdb) jump *$pc+8 (lldb) register write pc `$pc+8`
FWIW,在MacOS上,用“rip”替换“pc”似乎有效。
但是使用这种方法跳转到特定的线条似乎很困难。是否有更好的方法可以跳进lldb?
答案 0 :(得分:2)
几天前,在lldb存储库中添加了一个如何在Python中执行此操作的示例。见http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/jump.py
将该文件的内容保存到您的主目录,可能是类似~/lldb/jump.py
的内容,并使用类似
command script import ~/lldb/jump.py
(或将其放在~/.lldbinit
文件中),您将拥有jump
命令。
请注意,使用Objective-C程序中的ARC(自动引用计数),您可以通过跳转来轻松搞砸程序SUPER - 很多看起来无害的跳转实际上并非如此。这绝对是“用户提防”/“祝你好运”类调试器技巧。
答案 1 :(得分:1)
作为更新,我在这里留下LLDB教程的新功能:http://lldb.llvm.org/tutorial.html
最后,lldb运行直到行或帧退出步进模式: (lldb)线程直到100 此命令将在当前帧中运行线程,直到它到达此帧中的第100行,或者如果它离开当前帧则停止。这非常接近于gdb"直到"命令。
因此,(lldb) thread until <lineno>
为当前线程提供了技巧。
此外,(lldb) help thread until
还包含其他选项。