Wie gdb gegen einen daemon in den hintergrund?
Ich versuche zu Debuggen eines server-ich schrieb mit gdb als es segfaults unter ganz bestimmten und sehr seltenen Bedingungen.
Gibt es eine Möglichkeit, ich kann den gdb im hintergrund laufen (über stillen oder im batch-Modus?), Folgen die Kinder (wie mein server ist ein daemon und löst sich von der Haupt-PID) und automatisch einen dump der Kern und der backtrace (zu einem bestimmten Datei), wenn das Programm abstürzt?
- stackoverflow.com/questions/17965/generate-a-core-dump-in-linux SO ein post über die Herstellung von core-dumps
- vmlinux.org/jocke/mirror/www.objsw.com/docs/gdb_22.html ist ein Toter link.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht einfach den Prozess laufen interaktiv in einer persistenten screen-Sitzung? Warum muss es ein daemon beim Debuggen? Oder nur gdb in die screen-Sitzung und befestigen Sie es an den Laufenden Prozess (z.B. gdb /path/to/binary -p PID_of_binary) nach forks.
Vorausgesetzt Sie haben die entsprechenden Berechtigungen haben, können Sie den gdb anzuhängen, um jeden Prozess. Sie können es auf der Kommandozeile mit:
oder innerhalb von gdb mit dem attach-Befehl:
So, sobald Ihr daemon gestartet wurde, können Sie eine der folgenden Verfahren anfügen an die Letzte PID-Ihre daemon ausgeführt wird. Anbringen gdb Stoppt den Prozess, die Sie verfolgen, so dass Sie brauchen, um eine mit "weiter", um es neu zu starten.
Weiß ich nicht, einen direkten Weg zu bekommen, gdb, um beliebige Befehle auszuführen, wenn das Programm abstürzt. Hier ist ein workaround, das ich denken kann:
handle SIGSEGV nostop
)Ersten, würde ich Ihre setup-shell /Umgebung, um Ihnen einen core dump. In der bash:
Sobald Sie den core-dump verwenden, können Sie den gdb zu prüfen, die stack-trace:
Wie generieren Sie einen stacktrace, wenn mein gcc-C++ - app stürzt ab Antwort auf diese Frage sollte das tun, was Sie wollen. (vorausgesetzt, Sie können änderungen in Ihrem code)
Ich bin nicht wirklich ein gdb Experte, aber zwei Dinge in den Sinn kommen
Möchten Sie vielleicht einen Blick auf, wie Samba erleichtert debugging; es hat einen konfigurierbaren "Panik-Aktion" kann Aussetzung der Anwendung, Benachrichtigen Sie den Entwickler, spawn gdb, usw., und wird als Teil der signal-handler. Sehen lib/util/Fehler.c in den Samba-source-tree.