Beim Kompilieren meines Projekts mit clang ++ ist der Pfad zu den Quelldateien offensichtlich nicht im Objektcode enthalten. Das bedeutet, dass gdb keine Quelldateien finden kann, um Code anzuzeigen. Für bestimmte Fälle kann ich den Befehl directory
von gdb benutzen, um ein Verzeichnis hinzuzufügen, aber mein Projekt hat viele Quellverzeichnisse und das wird sehr schnell nervig.
Wenn ich meine Konfiguration auf g ++ umstellen will, findet gdb einfach alle meine Quelldateien.
Diese Funktion funktionierte mit ++ 2,9 auf Snow Leopard, funktioniert aber nicht mit clang ++ 3.1 auf Lion. Ich habe XCode 4.3.2.
Gibt es eine Option clang, die die Verwendung vollständiger Pfade in Objektdateien erzwingt? Könnte etwas anderes mit meiner Konfiguration nicht stimmen?
Ich habe Folgendes entdeckt: Das Problem tritt auf, wenn Projekte mit hierarchischen Makefiles erstellt werden. Wenn ein Unterverzeichnis aus einem übergeordneten Verzeichnis erstellt wurde (in meinem Makefile: make -w -C sub-dir
), kann gdb die Quelldatei nicht öffnen. Wenn Sie in das Unterverzeichnis wechseln und nur für dieses Verzeichnis aufrufen, findet gdb die Quelle. Sie können dies überprüfen, indem Sie den Build-Pfad in den generierten Objektdateien durchsuchen. Ich habe strings object-file | grep $HOME
verwendet.
Ich habe auch bemerkt, dass dies für eine Objektdatei nicht passiert ist: Diese Datei wurde nicht mit CC kompiliert. Diese Datei wurde mit esql kompiliert. Am Ende ruft esq CC an.
Deshalb habe ich diese Umgehungslösung ausprobiert: Rufen Sie clang nicht direkt von make an. Rufen Sie clang aus einem Shell-Skript auf.
%Vor%Hurra! gdb öffnet die Quelldateien!
BTW: das Ersetzen von make -w -C sub-dir
durch (cd sub-dir;make -w)
ist eine weitere Problemumgehung.