In meiner Anwendung handle ich mit SIGSEG, um ein Backtrace zu erzeugen, und rufe abort()
an, um einen Core Dump zu generieren.Wie zu finden, welcher Thread SEGFAULT in einer post-mortem gdb Sitzung verursacht hat?
Wenn ich jetzt eine gdb-Post-Mortem-Analyse des Kerns ausführen, ist der Thread, der das SEGFAULT verursachte, nicht mehr sichtbar. Gibt es etwas, was ich tun kann, sehe ich die Ursache für die SEGFAULT?
Mit freundlichen Grüßen, Martin
Machst du auch andere Arbeit im Handler? Warum lässt du das Betriebssystem nicht einfach so laufen, dass es einen Core für dich übrig lässt? –
Erstellen Sie einfach einen Rückstand zu stderr und rufen Sie dann abort(). –
Bitte geben Sie Ihr Betriebssystem und was genau Sie in GDB beobachten. Unter Linux (und jedem anderen UNIX, das ich mir vorstellen kann) wird der SIGSEGV-Handler in dem Thread ausgeführt, der SIGSEGV an erster Stelle verursacht hat. Wenn dieser Handler abort() aufruft, enthält der Core-Dump diesen Thread als Thread # 1, und es wird kein Problem geben, genau herauszufinden, welcher Befehl und welcher Call-Stack das Problem verursacht hat. Da Sie Schwierigkeiten haben, sind Sie entweder auf einem "seltsamen" Betriebssystem oder Sie beschreiben nicht richtig, was Sie tatsächlich beobachten. –