2

如何跳转到 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?

4

2 回答 2

2

几天前,在 lldb 存储库中添加了一个如何在 Python 中执行此操作的示例。见http://llvm.org/svn/llvm-project/lldb/trunk/examples/python/jump.py

将该文件的内容保存到您的主目录,可能类似于~/lldb/jump.py并使用以下命令将其加载到您的 lldb 中

command script import ~/lldb/jump.py

(或将其放入您的~/.lldbinit文件中),您将获得一个jump命令。

请注意,使用 Objective-C 程序中的 ARC(自动引用计数),您可以通过四处跳转来超级容易地搞砸程序 - 很多看起来无害的跳转实际上并非如此。这绝对属于调试器技巧的“用户小心”/“祝你好运”类别。

于 2013-03-15T01:38:01.107 回答
1

作为更新,我在这里留下了 LLDB 教程中的一个新特性:http: //lldb.llvm.org/tutorial.html

最后,lldb 有一个运行直到行或帧退出步进模式: (lldb) thread until 100 此命令将在当前帧中运行线程,直到它到达该帧中的第 100 行,或者如果它离开当前帧则停止。这与 gdb 的“直到”命令非常接近。

因此,(lldb) thread until <lineno>对当前线程有效。

此外,还(lldb) help thread until包含其他选项。

于 2015-06-18T20:16:31.413 回答