2015-08-19 5 views
0

Я запустил отладчик LLDB из командной строки с целевым автономным исполняемым кодом C и установил начало метода main() в качестве точки останова.LLDB отладчик шаг разрешения

После запуска приложения в отладчике я увидел, что он останавливается на конвейере, а не на линии кода 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)?

+1

Вы компилировались с помощью '-g' или подобного? –

+0

компиляция кода с флагом -g, похоже, устранила проблему. что этот параметр представляет в компиляторе clang? – Zohar81

+1

В gcc, clang и др. '-g' разрешает отлаживать символы в сгенерированном коде - вы обычно это хотите для любых отладочных или профилирующих сборок (а иногда и для релизов). –

ответ

2

Вам необходимо скомпилировать с включенными символами отладки (например, -g), чтобы gdb или lldb могли выполнять шаг на уровне источника.

В GCC, грохотом, и др-g включает отладочные символы в сгенерированном коде - обычно требуется это для любой отладки или профилирование сборки (а иногда даже выпуск сборки тоже).