2010-11-27 8 views
8

Ich bin es leid, meinen Quellcode unberührt zu lassen, bis ich mit seinem Debuggen fertig bin. Jedes Mal, wenn ich meinen Code ändere, beginnt GDB sich darüber zu beschweren:Einbetten eines Programms Quellcode in seine Binärdatei mit GCC für die spätere Verwendung von GDB

Warnung: Quelldatei ist aktueller als ausführbare Datei.

bis ich es neu kompilieren, was nicht immer schnell erledigt werden kann. Ich denke, es wäre großartig, wenn es möglich wäre, den Quellcode eines Programms in seine Binärdatei aufzunehmen und GDB anstelle seiner aktuellen Version verwenden zu lassen.

Kann jemand einen Weg vorschlagen, wie man es macht? Wurde das überhaupt umgesetzt?

Antwort

3

GCC ist Open Source - Sie können es beheben. Natürlich müssten Sie LD wahrscheinlich überarbeiten, um die Informationen korrekt zu behandeln, und Sie müssten GDB definitiv reparieren, um die eingebettete Quelle verwenden zu können. Sie würden für die Debugging-Informationen ein nicht standardmäßiges Format verwenden, sodass Sie wahrscheinlich die anderen Werkzeuge ändern müssen, die Objektdateien manipulieren.

So ist die Möglichkeit da. Aber es ist einfacher, das Gleiche wie alle anderen auf der Welt zu tun und Ihre Quelle herumzuhalten, bis Sie mit der Fehlersuche fertig sind. Normalerweise können Sie eine einzelne GDB-Sitzung ausführen, während Sie die ausführbare Datei bei Bedarf mehrmals neu erstellen. Und normalerweise ist es am einfachsten, die aktuelle Version des Codes und nicht die Version von gestern zu debuggen. Wenn Sie die gestrige Version debuggen müssen, benötigen Sie den Code von gestern (Sie haben ein gutes VCS an Ort und Stelle, oder?), So dass Sie sehen können, was mit dem Code von gestern und nicht mit der heutigen modifizierten Version des Codes falsch war .

Ich gebe Ihnen Kredit für das Stellen der Frage - es braucht etwas Querdenken, um mit der Idee zu kommen. Gut gemacht! Aber in der Praxis ist Ihr Vorschlag entschieden nicht-trivial zu implementieren.

+0

Sicher habe ich nicht genug Zeit/Fähigkeit/Geduld/muss es als neues Feature implementieren, aber ich bin ziemlich überrascht, dass es noch nicht implementiert wurde. Obwohl ich zustimme, dass es in den meisten Fällen nicht benötigt wird, kann es manchmal von Nutzen sein. Zum Beispiel starte ich einen Debugger mit meiner alten Binärdatei, um herauszufinden, was falsch ist. Ich finde die Ursache des Problems, aber dann, direkt nachdem ich die Hälfte des Codes geschrieben und gespeichert habe, stürzt die GDB-Sitzung aufgrund eines Tippfehlers ab. Jetzt muss ich entweder den Code ohne Hilfe des Debuggers reparieren oder ein Rollback durchführen, das Programm neu erstellen, GDB ausführen und die Änderungen rückgängig machen! – undercat

+0

@vovick: Es gibt mindestens zwei Gründe. Eines ist historisch: Die reichlichen verfügbaren Ressourcen waren nicht immer verfügbar, und die Leute fühlten (wahrscheinlich zu Recht), dass es besser war, den debuggablen Code nicht mit der tatsächlichen Quelle zu verwischen, da dies zu viel Speicherplatz und Speicher erfordern würde. Früher war es schwer genug, das Programm in den Speicher zu pushen - geschweige denn die zusätzlichen Debugging-Informationen hinzuzufügen. Das andere ist praktisch: Die Leute finden es nicht so schwer, die relevante Quelle verfügbar zu halten, um Putten zu rechtfertigen die Anstrengung in das Tun, wie Sie vorschlagen. –

Verwandte Themen