Heim >Backend-Entwicklung >C++ >Wie kann ich Kerndateien, die auf verschiedenen Linux-Distributionen generiert wurden, genau debuggen?

Wie kann ich Kerndateien, die auf verschiedenen Linux-Distributionen generiert wurden, genau debuggen?

DDD
DDDOriginal
2024-12-17 06:35:25237Durchsuche

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

Debuggen von Kerndateien über verschiedene Linux-Distributionen hinweg

Wenn eine Kerndatei auf einer anderen Linux-Distribution als Ihrer Entwicklungsumgebung generiert wird, wird der Stack-Trace erstellt ist möglicherweise nicht ganz aussagekräftig. Dynamisch verknüpfte ausführbare Dateien basieren auf Adressen innerhalb gemeinsam genutzter Bibliotheken, und diese Adressen können zwischen den Distributionen variieren. GDB führt den Absturz möglicherweise fälschlicherweise auf Funktionen in Ihrer Kopie der Bibliothek zurück, während das System des Kunden möglicherweise eine andere Funktion an derselben Adresse hat.

Um die Genauigkeit des Stack-Trace zu überprüfen, kann es sein, dass die betreffende Funktion disassembliert wird offenbaren, dass die Adresse in eine Anweisung fällt oder ihr eine Nicht-CALL-Anweisung vorangeht. In solchen Fällen ist der Stack-Trace unzuverlässig.

Um einen genaueren Trace zu erhalten, können Sie den Kunden auffordern, die folgenden Bibliotheken bereitzustellen, die von der problematischen Binärdatei verwendet werden:

cd /
tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...

Auf Ihrem System:

mkdir /tmp/from-customer
tar xzf to-you.tar.gz -C /tmp/from-customer
gdb /path/to/binary
(gdb) set solib-absolute-prefix /tmp/from-customer
(gdb) core core  # Important: Set solib-... before loading core
(gdb) where      # Get meaningful stack trace!

Debuggen mit optimierten Binärdateien

Statt Wir empfehlen Kunden, eine -g-Binärdatei auszuführen. Ein bevorzugter Ansatz besteht darin, die Binärdatei mit den Optimierungsflags -g und -O2 zu erstellen und die Debug-Informationen vor der Verteilung zu entfernen:

build with -g -O2 -o myexe.dbg
strip -g myexe.dbg -o myexe
distribute myexe to customers
when a customer gets a core, use myexe.dbg to debug it

Dies ermöglicht ein vollständiges symbolisches Debugging ( Datei/Zeile, lokale Variablen), ohne vertrauliche Quellcodedetails weiterzugeben.

Das obige ist der detaillierte Inhalt vonWie kann ich Kerndateien, die auf verschiedenen Linux-Distributionen generiert wurden, genau debuggen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn