it-swarm.com.de

Fehler "Keine Quelle für main () verfügbar" beim Debuggen von einfachem C++ in Eclipse mit gdb

Ich habe Probleme beim Debuggen eines C++ - Programms in Eclipse (der neueste RC von Helios, aktualisiert mit aktuellem CDT aus sich selbst) unter OSX.

Das Programm ist sehr einfach (im Wesentlichen Lektion 2 aus den NeHe-OpenGL-Tutorials), bestehend aus einer CPP-Datei und unter Verwendung von OpenGL- und Cocoa-Frameworks sowie der Verknüpfung mit libSDL.a und libSDLmain.a.

Die Struktur des Projekts ist sehr einfach: Die Quelldatei (en) befinden sich in einem Unterverzeichnis des Projekts mit dem Namen src /, und die ausführbare Datei wird im Stammverzeichnis des Projekts erstellt.

Das Problem ist, dass immer, wenn ich versuche, Haltepunkte hinzuzufügen und zu debuggen, die Haltepunkte perfekt getroffen werden, aber keine Quelle angezeigt wird. Stattdessen bekomme ich im Codefenster die Fehlermeldung "Keine Quelle für main () verfügbar".

Für die Compiler-Flags sind die Optimierungen auf none gesetzt, und sowohl für den Compiler als auch für den Linker ist das Debug-Symbol-Flag gesetzt (-g).

Die Debugging-Einstellung in Eclipse ist auf "Standard spawn progress" und der Debugger auf "gdb" gesetzt.

Das seltsamste ist nun, dass ich, wenn ich versuche, genau dieselbe ausführbare Datei zu debuggen - dh. das gleiche, das von Eclipse gebaut wurde - mit gdb vom Terminal (Shell) aus funktioniert alles gut. Haltepunkte werden getroffen, Quellcode wird angezeigt, überhaupt keine Probleme.

Ich habe sichergestellt, dass sowohl Eclipse als auch die Shell die gleiche gdb-Programmdatei verwenden, und zwar (es ist/usr/bin/gdb).

Nun kann ich falsch liegen, aber dies alles legt nahe, dass es kein Problem mit den Compiler- und Linker-Flags geben kann (weil dieselbe ausführbare Datei von der Shell aus debuggbar ist). Daher muss das Problem vermutlich darin liegen, wie gdb aufgerufen wird aus Eclipse heraus? Vielleicht, wenn von Eclipse aus gdb ausgeführt wird, andere Konfigurationsdateien abholen oder etwas anderes als wenn es von der Shell ausgeführt wird? (Weiß jemand?)

Ich würde mich sehr über jede Hilfe freuen, da ich langsam durchdringt!

Bitte lassen Sie mich wissen, ob weitere Details nützlich sind - genaue Versionsnummern von Eclipse/cdt/gdb, genaue Linker-/Compiler-Befehlszeilen usw. - und ich werde diesen Post sehr gerne mit ihnen aktualisieren.

Vielen Dank im Voraus,

obwohl.

---editiert @ "Vor 14 Stunden"---

Ich habe die Option "Dateisystempfad hinzufügen" (mit "Unterordner suchen") ausprobiert, aber das hat nicht funktioniert. Ich habe auch versucht, ein neues, völlig flaches Projekt zu erstellen, aber das hat auch nicht funktioniert ... Ich habe sogar versucht, eine Galileo-Version (Eclipse-SDK-3.5.2RC4 mit CDT-Update) zu bekommen, aber das machte keinen Unterschied (abgesehen von gdb.) langsamer zu starten).

Und noch etwas Merkwürdiges ist mir aufgefallen: Sobald ich die Meldung "Keine Quelle verfügbar" erhalte, kann ich die Eclipse-Konsole wechseln, um die "gdb" -Konsole anzuzeigen, und auch den "Verbose Console-Modus" einschalten, damit ich es kommunizieren kann geben Sie dann die Befehle "l" und "bt" aus und lassen Sie sie erfolgreich arbeiten, wobei die richtige Quelle und der Stapel angezeigt werden, an dem mein Haltepunkt gefunden wurde. Was, wenn ich falsch liege, richtig sein muss, bedeutet das, dass die Informationen vorhanden sind und gdb korrekt aufgerufen wird. Warum wird Eclipse diese Informationen nicht sehen?

Um ehrlich zu sein, bin ich schon fast dabei, Eclipse aufzugeben ... Ich kam auch mit so großen Hoffnungen dazu.

Jede zusätzliche Hilfe oder Gedanken wäre sehr dankbar.

t. 

20
thoughton

Ich habe die Antwort gefunden! Und es ist peinlich einfach.

Das Problem war, dass ich die Release-Version von SDL anstelle der Debug-Version verwendete! (Ich hatte 'libsdl' von MacPorts, während ich 'libsdl-devel' hätte haben sollen.)

Meine generische Antwort lautet also: Stellen Sie sicher, dass die Bibliotheken, für die Sie eine Verknüpfung erstellen, auch mit Debug-Flags kompiliert wurden. Es reicht nicht immer aus, nur den eigenen Code festzulegen.

9
thoughton

Dieser Thread schlägt vor:

-g -O0

debug-Flags für die Eclipse CDT-Kompilierung festgelegt werden.
Manchmal ist es einfach ein Problem, die Anwendung vollständig neu zu erstellen ( wie hier )

Siehe auch diesen Thread eine ähnliche Situation beschreiben:

Ich habe festgestellt, dass ich in Eclipse manchmal den Pfad zu meinen Quelldateien hinzufügen muss, indem Sie den "add filesystem path" (mit "search sub-folders") im Debug-Dialogfeld verwenden (auch wenn sie im selben Projekt sind, das ich debuggen) Ich habe kein Muster bemerkt, zu dem ich dies tun muss. Aber es kann einen Versuch wert sein. 

29
VonC

Hier liegt ein weiterer Grund für dieses Problem. Meine Konfiguration verwendete -g3 als Option für gcc. Das Ändern in -g löste das Problem. Es scheint eine gewisse Inkompatibilität zwischen gcc und gdb zu geben. Ich habe überprüft, dass es sich bei gdb um die neueste Version handelt (mit apt-get).

6
user206622

Ich möchte diesem alten Thread etwas neues Blut hinzufügen.

Ich bin auf dieses Problem gestoßen, als ich versuchte, ein Gnu-Arm-Projekt zu kompilieren und zu debuggen.

Ich löste das Problem, indem ich das Makefile modifizierte: "-G -O0" am Ende dieser Zeile "CFLAGS + = -Wall -Werror -O3"

4
ulyssis2

Gehen Sie zu Projekteigenschaften, C/C++ Build -> Einstellungen. Klicken Sie auf der ersten Registerkarte (Tool-Einstellungen) unter Cross GCC Compiler auf Debugging und setzen Sie Debug Level auf Maximum (-g3).

2
Almir

Ich hatte dieses Problem, als ich das neueste GCC kompilierte, aber nicht auf das neueste GDB aktualisiert. Nach dem Update hat es richtig funktioniert.

2
Brian

Wenn Sie erwähnen möchten, dass Sie für den Fall, dass Sie cmake zum Erstellen des Projekts verwenden, ein Lösungsansatz darin besteht, das "debug flag" zum Befehl cmake hinzuzufügen, d. H. 

$ cmake/Pfad/zu/main/cmake_file -DCMAKE_BUILD_TYPE=Debug

1
Guy Avraham

Für alle anderen, die dieses Problem haben könnten,

Ich habe gestern Abend das linuxtools/valgrind-Plugin installiert, um Speicherprofile zu erstellen, und es scheint, dass dies die normale gdb gebrochen hat. als ich die linuxtools-plugins entfernte, funktionierte alles wieder normal.

Vielleicht möchten Sie das auch versuchen.

1
Jon

Ich hatte ein ähnliches Problem. Ich habe CFLAGS=-Wall -O2 -fPIC -DPIC -lm -lasound verwendet und hatte nie Probleme damit zu kompilieren, aber als ich versuchte, es auf Eclipse IDE zu debuggen, bekomme ich diese Fehlermeldung: No source available for "main() at 0x401080" dann habe ich -g zu dieser Zeile hinzugefügt und es hat gut funktioniert:

CFLAGS = -g -Wall -O2 -fPIC -DPIC -lm -las

Dieses Problem hängt davon ab, wie gdb aufgerufen wird. Ich fand, dass ich die Quelldateipositionen manuell angeben musste, als ich diesen Fehler erhielt. Obwohl ich das bereits unter Projekteigenschaften konfiguriert hatte. Danach hatte Eclipse kein Problem mehr mit der Bereitstellung der entsprechenden Quelle.

Die Verwendung der Release-Version und der Debug-Version einer Bibliothek kann Ihr spezielles Problem sein (wenn Sie eine Bibliothek aus dem Quellcode erstellen und dann debuggen). Wenn jemand eine vorkompilierte Bibliothek verwendet, ist er niemals in der Lage, Haltepunkte zu setzen, sodass die Korrektur nicht für sie gilt.

0
iheanyi

Einmal das gleiche Problem begegnet. Sie müssen nur zu Ihren Projekteigenschaften gehen, indem Sie ALT + ENTR drücken oder mit der rechten Maustaste auf Projekt klicken und nach unten scrollen. Dort finden Sie Eigenschaften. Erweitern Sie C/C++ - Build links. Klicken Sie dann auf Einstellungen. Sobald Sie die Einstellungen geöffnet haben, klicken Sie auf Werkzeugeinstellungen. Im MCU-GCC-Compiler gibt es eine Debugging-Option. Klicken Sie auf Debuggen und fügen Sie hinzu 

-g -O0

in den anderen Debugging-Flags. Debuggen des Projekts jetzt versuchen.

0
shivam gupta

Ich bin gerade mit diesem Problem konfrontiert worden, und nachdem ich einige Zeit gebraucht habe, um es herauszufinden, stelle ich fest, dass die Registerkarten "Argumente" und "Haupt" im Dialogfeld "Debug-Konfigurationen" miteinander in Konflikt stehen.

Stellen Sie sicher, dass die C/C++ - Anwendungs- und -Programmargumente auf dieselbe Binärdatei verweisen.

0
Fading