2012-07-05 5 views
6

Ich verwende google-breakpad. Dies ist ein Fehlerberichterstattungsprogramm, das im Hintergrund ausgeführt wird, um den Absturz eines anderen Prozesses zu melden.Warum behandelt Google breakpad nicht alle Abstürze? Wie kann ich diese Fälle debuggen?

Es funktioniert in fast jeder Situation.

Allerdings kann es gelegentlich zu einem Absturz kommen. Es gibt keinen Bericht und keine Speicherauszugsdatei. Es stürzt einfach ab. Der letzte Hinweis für den Absturz ist eine Windows-Ereignismeldung.

Wie kann ich diese Abstürze debuggen? Was würde Breakpad veranlassen, den Unfall nicht zu behandeln? Welche Methoden kann ich verwenden, um die Situation zu debuggen?

+0

Könnten das SEH-Ausnahmen sein? Sind das Dinge wie Stapelüberläufe oder Zugriffsverletzungen? –

+0

Ich denke, es könnte mit Stack-Überläufen zusammenhängen. Breakpad hat Zugriffsverletzungen gut erfasst. – Hybrid

+1

Breakpad sagt, dass es SetUnhandledExceptionFilter() -Funktion (Windows) verwendet. Ich bin nicht sicher, ob die Callback-Funktion für SetUnhandledExceptionFilter aufgerufen wird oder nicht, bevor der Prozess in dieser Situation beendet wird. – Hybrid

Antwort

10

Die Visual C++ - C/C++ - Laufzeitbibliothek entfernt den Hook-Set mit SetUnhandledExceptionFilter unter bestimmten Umständen; B. wenn ein Pufferüberlauf oder ein anderes Sicherheitsproblem erkannt wird.

This Microsoft feedback page listet auf, wie dieses Verhalten für die meisten Fälle beendet wird, aber besagt, dass es für den Pufferüberlauffall nicht möglich ist, ohne Sicherheitsprobleme einzuführen.

+0

Ich kann nicht sehen, dass Microsoft Feedback-Seite - gibt es einen neuen Link oder etwas, das ich betrachten kann? –

+4

Die Seite scheint 404 gegangen zu sein. Ich erinnere mich nicht genau, was darauf, aber versuchen Sie die MSDN-Dokumentation für _set_abort_behavior und _set_invalid_parameter_handler. –