2013-01-31 44 views
6

我想调试一个我没有源的库,所以我使用了很多LLDB反汇编。我想知道是否有一种方法可以在每次调用“线程加入”之后自动运行反汇编。目前,当我执行“线程引入”时,LLDB执行该指令,然后返回一个空白提示。为了看到EIP移到哪里,我需要在每次线程切入之后键入反汇编,这非常令人分心和讨厌(另外,LLDB似乎不会以';'结束表达式,因此将多个命令放在一行上并不会没有工作。)作为一个多个命令的LLDB别名

更一般地说,我想知道是否有办法为多个LLDB命令连续创建一个别名:例如,一个可以打印%rdi内容的别名,然后反汇编10行EIP。 (是的,我可以为它编写python脚本,但我没有那么多时间在我的手上:-(

回答

1

是的,正确的方法是通过Python脚本界面进行。为了避免gdb在调试器的命令语言中填充足够的流控制和执行逻辑来实现这种可能(或者说 - 使其成为可能......很差),而不是那种方法,在你需要的地方有一个低的障碍使用Python来完成任务 - 但是通过Python中一些非常易于使用的界面,调试器的全部功能都可用。lldb将脚本语言留给Python,并专注于提供一个干净而强大的API,它很容易使用Python。

但是为了解决你的目标,为什么不把stop-disassembly-count设置做你所需要的?实际上,它应该已经在做你想做的事情,除非你已经通过更改默认设置stop-disassembly-display禁用了~/.lldbinit文件中的反汇编显示。

(lldb) settings show stop-disassembly-count 
stop-disassembly-count (int) = 4 
(lldb) settings show stop-disassembly-display 
stop-disassembly-display (enum) = no-source 
(lldb) 

LLDB的默认行为是显示一些那种情况下,当你通过一个程序步。如果源代码可用,它将显示您正在逐步完成的源代码。如果没有源代码,它将显示即将执行的汇编指令。还有,当你有调试信息的小错误(所以调试器知道文件和行号),但源代码是不可用(或在不同的路径) - 现在LLDB会告诉你拆卸但这不是正确的行为这个案例。用户仍然在源级别操作(使用sn步骤,而不是sini的指令级步进)和LLDB应该表现在这种情况下没有上下文,只显示源文件名和行号。

+0

好这个问题是与机器上的lldbinit文件调试。真的很喜欢LLDB。谢谢您的帮助。 – MachPortMassenger