2012-04-03 2 views
0

Ich habe einen Core Dump von 2 Anwendungen generiert ->/usr/bin/python und/usr/bin/app1. Ich weiß, dass der Dump kann Analysieren von Core Dump von mehreren Anwendungen mit gdb generiert

gdb /path/to/app /path/to/core 

von

analysiert werden, aber ist es eine Möglichkeit, beide Anwendungen im arguement aufzunehmen?

Ich habe versucht, gdb '/ usr/bin/python/usr/bin/app1' core.xxx, aber das scheint nicht richtig.

Irgendwelche Vorschläge?

Antwort

1

Ich denke, dass Sie mit einem einzigen Aufruf von gdb nicht erreichen können, was Sie wollen. Aber Sie könnten gdb zweimal in verschiedenen Terminalfenstern ausführen. Ich habe das mehr als einmal gemacht, und es funktioniert ganz gut (außer natürlich, dass dein eigenes Gehirn leicht überlastet sein könnte).

Ein gdb Prozess kann nur ein einziges Programm debuggen, mit einem einzigen debugged Prozess oder (für post mortem debug) eine einzige core Datei.

Und eine gegebene core Datei wird durch abnormale Beendigung eines einzelnen Prozesses (nicht mehrere) erzeugt, so verstehe ich Ihre Frage nicht.

Anscheinend haben Sie einen Absturz in einer Ausführung von python wahrscheinlich durch Ihren fehlerhaften C-Code ergänzt. Ich schlage vor, eine debuggable Variante von Python zu haben, vielleicht indem ich das python3-all-dbg Paket oder etwas Ähnliches installiere, dann benutze gdb darauf. Natürlich kompilieren Sie Ihren C-Code in Python mit aktiviertem Debugging. Vielleicht haben Sie eine Invariante des Python-Garbage Collectors verletzt.

+0

Als ich versuchte, die Kerndatei mit gdb python core.xxx zu debuggen, sehe ich eine Zeile im Debugger, die sagt ** Kern generiert von '/ usr/bin/python/usr/bin/app1' **. Ich nahm an, dass es von zwei Prozessen generiert wurde, aber ich fange an zu denken, dass app1, das zufällig ein Python-Prozess ist, dazu führte, dass es eine solche Nachricht erzeugte. – avid

+0

Nein, 'gdb' zeigt nur die gesamte Befehlszeile (technisch gesehen das' argv'-Array, das an 'main' von Python übergeben wurde), das fehlerhaft war. Nur ein Prozess erzeugte den Core-Dump. –