Anzeigen von Debug-Informationen zu Ausnahmen für Benutzer

Ich arbeite derzeit daran, meiner OSS-Anwendung Ausnahmen und Ausnahmebehandlung hinzuzufügen. Ausnahmen waren von Anfang an die allgemeine Idee, aber ich wollte ein gutes Rahmenwerk für Ausnahmen finden und ehrlich gesagt die Konventionen und Redewendungen für die Behandlung von C ++ - Ausnahmen ein wenig besser verstehen, bevor ich sie verwende. Ich habe viel Erfahrung mit C # /. Net, Python und anderen Sprachen, die Ausnahmen verwenden. Die Idee ist mir nicht fremd (aber ich bin weit davon entfernt, ein Meister zu sein).

Wenn in C # und Python eine nicht behandelte Ausnahme auftritt, erhält der Benutzer einen netten Stack-Trace und im Allgemeinen eine Mengesehr hilfreich unbezahlbare Debugging-Informationen. Wenn Sie an einer OSS-Anwendung arbeiten, müssen Benutzer diese Informationen in Fehlerberichte einfügen. Sagen wir einfach, ich finde es schwierig, ohne diese Informationen auszukommen. Für dieses C ++ - Projekt erhalte ich die Meldung "Die Anwendung ist abgestürzt" oder von informierten Benutzern die Meldung "Ich habe X, Y und Z ausgeführt und dann ist sie abgestürzt". Aber ich möchte auch diese Debugging-Informationen!

Ich habe mich bereits (und mit großen Schwierigkeiten) mit der Tatsache abgefunden, dass ich niemals eine plattform- und compilerübergreifende Methode zum Abrufen eines C ++ - Ausnahmestapel-Trace finden werde, aber ich weiß, dass ich den Funktionsnamen und andere erhalten kann relevante Information.

Und jetzt möchte ich das für meine unbehandelten Ausnahmen. Ich benutzeboost :: exceptionund sie haben das sehr schöndiagnoseinformationen thingamajig, das den (nicht verwickelten) Funktionsnamen, die Datei, die Zeile und vor allem andere ausnahmespezifische Informationen, die der Programmierer zu dieser Ausnahme hinzugefügt hat, ausdrucken kann.

Natürlich werde ich Ausnahmen innerhalb des Codes behandeln, wann immer ich kann, aber ich bin nicht so naiv zu glauben, dass ich nicht zulasse, dass ein Paar durchschlüpft (natürlich ungewollt).

Ich möchte also meinen Haupteingangspunkt in einentry Block mit einemcatch Dadurch wird ein spezielles Dialogfeld erstellt, das den Benutzer darüber informiert, dass in der Anwendung ein Fehler aufgetreten ist. Detaillierte Informationen werden angezeigt, wenn der Benutzer auf "Weitere" oder "Debug-Informationen" klickt. Dies würde den String von diagnostic_information enthalten. Ich könnte dann die Benutzer anweisen, diese Informationen in Fehlerberichte einzufügen.

Aber ein quälendes Bauchgefühl sagt mir, dass es eine wirklich schlechte Idee ist, alles in einen Try-Block zu packen. Ist das, was ich tun werde, dumm? Wenn es ist (und auch wenn es nicht ist), was ist ein besserer Weg, um das zu erreichen, was ich will?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage