Debug Informationen dumpen?

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Debug Informationen dumpen?

Beitrag von dazedly »

Hi Qt-Forum,

ich suche nach einer Möglichkeit, wie ich den Anwender z.B. einen gdb dump nach Programmabsturz senden lassen kann. Gibt es schon etwas, das ich unter linux benutzen darf? Es muss auch bei kommerzieller Nutzung erlaubt sein.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Debug Informationen dumpen?

Beitrag von brax »

Gegenfrage: Lieferst Du denn das Programm in einer Version aus, die mit Debug Informationen gebaut ist? Und wenn ja (was ich eher bezweifeln möchte) lässt Du denn das Programm beim Anwender immer mit angehängtem Debugger laufen?
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: Debug Informationen dumpen?

Beitrag von dazedly »

Naja sehr ungern, aber gefordert ist, dass wir bei solchen Fehlern debuggen können. Wenn gdb mit läuft ist es ja nicht gerade performant. Die Forderung ist eben, dass wir segfaults debuggen können.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Debug Informationen dumpen?

Beitrag von solarix »

Ich habe sowas mal unter Solaris gebastelt.. es geht schon ohne laufenden gdb, aber es ist keine sehr elegante Methode:

Bei Debug-Binaries kann man auf (den meisten) Unix-Systemen jederzeit den aktuellen Stack anzeigen lassen ("pstack", http://compute.cnr.berkeley.edu/cgi-bin/man-cgi?pstack) oder einen Core-Dump (Zwecks späteren Laden in einem Debugger) erstellen ("gcore", http://compute.cnr.berkeley.edu/cgi-bin/man-cgi?gcore).

Daher:

1. Im entsprechenden Programm müssen mehrere Signal-Handler aufgesetzt werden, so dass im Crash-Fall (SIGSEGV & CO) noch eine C-Funktion ausgeführt wird. Siehe dazu "man signal".
2. In dieser wird dann mit "getpid()" die eigene PID ermittelt, das Kommando "pstack pid > /tmp/crashdump.txt" zusammengestellt und mittels "system()" ausgeführt.

Das Problem hierbei ist, dass ein Crash-Signal jederzeit (z.B. auch beim Speicherallokieren) kommen kann und man daher im Signal-Handler nicht mehr zuviel machen kann... ich habe da schon rekursive Crashes beobachten können ;)
Daher: so wenig Code wie möglich. Ich würde auch auf Qt-Klassen verzichten. Falls du den Dump noch weiterverarbeiten möchtest, würde ich das nicht im abgestützten Programm machen, sondern erst "post-mortem" (z.B: via Start-Shellscript).

hth..
Antworten