LLDB 调试器步骤解析

LLDB debugger step resolution

我从命令行启动了 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 源代码行而不是装配线的步骤分辨率(就像我在 运行 lldb 来自 Xcode 时得到的一样)?

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

在 gcc、clang 中, -g 在生成的代码中启用调试符号 - 您通常希望它用于任何调试或分析构建(有时甚至发布也构建)。