LLDB调试器步骤解析

时间:2015-08-19 08:42:26

标签: c xcode macos debugging lldb

我已从命令行启动LLDB调试器,使用目标独立C可执行文件,并将main()方法的开头设置为断点。

在调试器中运行应用程序后,我看到它在装配线上停止,而不是C代码行。此外,每次我前进时,步进分辨率都是一条装配线。

这里是lldb的输出:

(lldb) target create "./a.out"
Current executable set to './a.out' (x86_64).
(lldb) breakpoint set --name main
Breakpoint 1: where = a.out`main, address = 0x0000000100000e80
(lldb) run
Process 2023 launched: './a.out' (x86_64)
Process 2023 stopped
* thread #1: tid = 0xfca5, 0x0000000100000e80 a.out`main, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000e80 a.out`main a.out`main:
->  0x100000e80 <+0>: pushq  %rbp
    0x100000e81 <+1>: movq   %rsp, %rbp
    0x100000e84 <+4>: pushq  %r15
    0x100000e86 <+6>: pushq  %r14
(lldb) n
Process 2023 stopped
* thread #1: tid = 0xfca5, 0x0000000100000e81 a.out`main + 1, queue = 'com.apple.main-thread', stop reason = instruction step over
frame #0: 0x0000000100000e81 a.out`main + 1
a.out`main:
->  0x100000e81 <+1>: movq   %rsp, %rbp
    0x100000e84 <+4>: pushq  %r15
    0x100000e86 <+6>: pushq  %r14
    0x100000e88 <+8>: pushq  %r12
(lldb) n

有什么办法可以改变单个C源代码行的步长分辨率而不是装配线(就像我从Xcode运行lldb时得到的那样)?

1 个答案:

答案 0 :(得分:2)

您需要在启用调试符号的情况下进行编译(例如-g),以便gdb或lldb能够在源级别执行。

在gcc中,clang, -g在生成的代码中启用调试符号 - 您通常希望将其用于任何调试或分析构建(有时甚至是发布版本)。< / p>