Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lade ich Debugsymbole für einen laufenden Prozess?

Wie lade ich Debugsymbole für einen laufenden Prozess?

WBOY
WBOYnach vorne
2024-02-09 11:18:08834Durchsuche

Wie lade ich Debugsymbole für einen laufenden Prozess?

Der PHP-Editor Xiaoxin zeigt Ihnen, wie Sie Debugging-Symbole für den laufenden Prozess laden. Im Softwareentwicklungsprozess ist das Debuggen ein sehr wichtiger Link. Wenn bei einem laufenden Prozess ein Problem auftritt, müssen wir Debugsymbole zum Debuggen laden. Debugsymbole enthalten Symbolinformationen des Codes, die es uns ermöglichen, das Problem während des Debuggens genauer zu lokalisieren. In diesem Artikel erklären wir ausführlich, wie Sie Debugging-Symbole für den laufenden Prozess laden, um Ihnen beim Debuggen zu helfen.

Frageninhalt

Ich habe eine C-Anwendung, die auf vielen Computern läuft, und manchmal treten bei einer Instanz Probleme auf und sie verhält sich seltsam. Leider passiert das fast nie. Diese Produktinstanzen werden mit starken Optimierungen (-march=XXX -Ofast) kompiliert und enthalten keine Debugging-Symbole, sodass ich nicht einfach einen Debugger anhängen kann, um ihren Status zu analysieren.

Aber ich denke, es sollte möglich sein, es mit denselben Flags plus -g3 再次编译应用程序,然后我可以使用 symbol-file application_executable_with_debug_symbols in gdb zu laden. Wenn ich dies jedoch mache, wird der Haltepunkt nie ausgelöst.

Gibt es eine andere Möglichkeit, einen Debugger an eine laufende Anwendung anzuhängen und Debugging-Symbole zu laden? Oder mache ich (offensichtlich) etwas falsch?

Danke

Workaround

Best Practice besteht darin, die Anwendung mit Debugging-Symbolen zu erstellen, die generierte Binärdatei zum Debuggen aufzubewahren, aber die gestrippte Binärdatei in der Produktion auszuführen strip -g app.debug -o app.release und auszuführen.

Wenn Sie eine Instanz finden, die sich seltsam verhält, können Sie die vollständige Debug-Version auf den Zielcomputer kopieren und ausführen gdb -ex 'attach $PID' app.debug. Voila: Sie haben vollständige Debugging-Symbole.

Der wahrscheinlichste Grund, warum das erneute Kompilieren der Anwendung nicht funktioniert, ist, dass Sie eine neue Binärdatei mit anderen Symbolen (vergleiche nm app.debugnm app.release),以及最可能的原因 (如果使用 GCC)是您省略了一些用于构建 app.release 的优化标志,或者您使用了略有不同的源 - 您必须使用完全相同的标志(并添加-g) und genau derselben Quelle erhalten, damit die Methode erfolgreich ist.

Das obige ist der detaillierte Inhalt vonWie lade ich Debugsymbole für einen laufenden Prozess?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen