Я пытаюсь отлаживать программу C++, которую я пишу, но когда я запускаю ее в LLDB и останавливаю программу, она показывает мне только ассемблер, а не исходный источник. например, после аварии Im пытается отладить:
Process 86122 stopped
* thread #13: tid = 0x142181, 0x0000000100006ec1 debug_build'game::update() + 10961, stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
frame #0: 0x0000000100006ec1 debug_build'game::update() + 10961
debug_build'game::update:
-> 0x100006ec1 <+10961>: movq (%rdx), %rdx
0x100006ec4 <+10964>: movq %rax, -0xb28(%rbp)
0x100006ecb <+10971>: movq -0x1130(%rbp), %rax
0x100006ed2 <+10978>: movq 0x8(%rax), %rsi
Я компилирую с -O0 -g
. Я вижу то же самое при запуске отладчика с помощью Xcode (Im on OSX) или из командной строки.
Что еще мне нужно сделать, чтобы получить исходный код в LLDB?
Дополнительные замечания
Ниже приведен пример типичной команды сборки:
clang++ -std=c++1y -stdlib=libc++ -fexceptions -I/usr/local/include -c -O2 -Wall -ferror-limit=5 -g -O0 -ftrapv lib/format.cpp -o format.o
Раньше -O2
существует, потому что это используется по умолчанию Im, но я полагаю, что более поздний -O0
переопределяет его, не так ли?
Что я пытался
-
Ive воссоздал эту проблему с помощью простой "привет мировой программы", используя те же настройки сборки.
-
После некоторого поиска я попытался запустить
dsymutil main.o
котором было указаноwarning: no debug symbols in executable (-arch x86_64)
, поэтому, возможно, символы отладки не генерируются моими командами сборки? -
Я также попытался добавить
-gsplit-dwarf
в команды сборки, но без эффекта. -
Вот ссылка из моей 'hello world version:
clang++ main.o -L/usr/local/lib -g -о привет
-
Я запускал
dwarfdump
(я читал об этом здесь) в исполняемых файлах и объектных файлах. Я смотрю на мой неподготовленный глаз, как и символы отладки, присутствующие в объектных файлах, но не в самом исполняемом файле (если толькоdwarfdump
работает только с объектными файлами, что возможно). Так что, может быть, этап связывания - проблема. Или, может быть, проблема с DWARF. -
Теперь я получил эту работу в программе hello world, выпустив команды сборки один за другим в терминале. Поэтому я предполагаю, что это может быть проблемой с моей системой сборки (Tup), возможно, запустив команды с другим рабочим каталогом, чтобы пути были искалечены или что-то в этом роде.