Ich versuche, ein C++ - Programm zu debuggen, das ich schreibe, aber wenn ich es in LLDB starte und das Programm stoppe, zeigt es mir nur den Assembler, nicht die Originalquelle. z.B. nach dem Absturz versuche ich zu debuggen:LLDB zeigt keinen Quellcode
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
ich mit -O0 -g
bin kompilieren. Ich sehe dasselbe, wenn ich den Debugger über Xcode (ich bin auf OSX) oder von der Kommandozeile aus laufe.
Was muss ich noch tun, um den Quellcode in LLDB anzeigen zu lassen?
Zusätzliche Hinweise
Hier ist ein Beispiel eines typischen Build-Befehl:
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
Je früher -O2
ist es, weil das ist der Standard ich verwende, aber ich glaube, die später -O0
Überschreibungen es richtig?
Was ich versucht habe
ich dieses Problem mit einem einfachen neu erstellt habe ‚Hallo Welt‘ Programm der gleichen Build-Einstellungen.
Nach einigem Suchen habe ich versucht,
dsymutil main.o
laufen zu lassen, derwarning: no debug symbols in executable (-arch x86_64)
sagte, also werden die debug Symbole möglicherweise nicht von meinen Erstellungsbefehlen erzeugt?Ich habe auch versucht,
-gsplit-dwarf
zu den Build-Befehlen hinzuzufügen, aber ohne Wirkung.Hier ist der Link-Befehl von meiner 'Hallo Welt' Version:
Klirren ++ main.o -L/usr/local/lib -g -o hallo
Ich lief
dwarfdump
(I read about it here) auf die ausführbaren Dateien und Objektdateien. Es sieht für mein ungeübtes Auge wie die Debug-Symbole sind in den Objektdateien vorhanden, aber nicht in der ausführbaren Datei selbst (es sei denn,dwarfdump
funktioniert nur auf Objektdateien, was möglich ist). Vielleicht ist die Verknüpfungsstufe das Problem. Oder vielleicht gibt es ein Problem mit dem DWARF.Ich habe jetzt funktioniert dies in der 'Hallo Welt' Programm, durch die Ausgabe von Build-Befehle eins nach dem anderen im Terminal. Ich vermute daher, dass dies ein Problem mit meinem Build-System sein könnte (Tup), möglicherweise die Befehle mit einem anderen Arbeitsverzeichnis, so dass die Pfade gemangled oder so etwas.
Xcode hat eine Option zum _strip der ausführbaren Datei, die vermutlich Debug-Symbole entfernt. Überprüfen Sie, ob diese Option eingestellt ist. – ForceBru
Ich baue von der Befehlszeile, nicht innerhalb von Xcode. Gibt es eine Möglichkeit, dass dies immer noch passieren könnte? Vielleicht wird die ausführbare Datei während des Linkens entfernt? Ich werde meinen Link-Befehl auch oben hinzufügen ... – Leo
http://imgur.com/a/idI6C EDIT: Ich sah nur, dass Sie die Befehlszeile verwenden ... nvm .. aber ich werde das hier lassen, nur für den Fall, dass Sie Entscheiden Sie sich, Xcode zu verwenden. – Brandon