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
在生成的代码中启用调试符号 - 您通常希望它用于任何调试或分析构建(有时甚至发布也构建)。
我从命令行启动了 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
在生成的代码中启用调试符号 - 您通常希望它用于任何调试或分析构建(有时甚至发布也构建)。