Ausnahmen enthalten keine nützlichen Details, da das Konzept der Ausnahmen in der Softwareentwicklungsdisziplin noch nicht ausreichend ausgereift ist, so dass viele Programmierer sie nicht vollständig verstehen und sie daher nicht richtig behandeln.
Ja, IndexOutOfRangeException
sollte den genauen Index enthalten, der außerhalb des gültigen Bereichs lag, sowie den Bereich, der zum Zeitpunkt des Auslösens gültig war, und ist für die Ersteller der .NET-Laufzeit verächtlich, sofern dies nicht der Fall ist. Ja, die table or view not found
Ausnahme von Oracle sollte den Namen der Tabelle oder Sicht enthalten, die nicht gefunden wurde, und auch die Tatsache, dass sie für den Verantwortlichen nicht verächtlich ist.
Zu einem großen Teil rührt die Verwirrung von der fehlgeleiteten ursprünglichen Idee her, dass Ausnahmen von Menschen lesbare Botschaften enthalten sollten, was wiederum darauf zurückzuführen ist, dass man nicht weiß, worum es sich bei Ausnahmen handelt. Es handelt sich also um einen Teufelskreis.
Da die Menschen der Meinung sind, dass die Ausnahme eine für Menschen lesbare Nachricht enthalten sollte, sind sie der Ansicht, dass die von der Ausnahme übermittelten Informationen auch in der für Menschen lesbaren Nachricht formatiert werden sollten. Dann ist es ihnen entweder langweilig, alle für Menschen lesbaren Nachrichten zu schreiben. oder sie befürchten, dass dadurch eine nicht zu empfehlende Menge an Informationen an neugierige Augen weitergegeben wird, die die Nachricht möglicherweise sehen. (Die in anderen Antworten genannten Sicherheitsprobleme.)
Die Wahrheit ist jedoch, dass sie sich darüber keine Sorgen machen sollten, da die Ausnahme keine für Menschen lesbare Botschaft enthalten sollte. Ausnahmen sind Dinge, die nur Programmierer jemals sehen und / oder behandeln sollten. Wenn es jemals notwendig sein sollte, einem Benutzer Fehlerinformationen zu präsentieren, muss dies auf sehr hohem Niveau, auf raffinierte Weise und in der Sprache des Benutzers erfolgen, die statistisch gesehen wahrscheinlich nicht Englisch ist.
Für uns Programmierer ist die "Nachricht" der Ausnahme der Klassenname der Ausnahme , und alle anderen Informationen, die für die Ausnahme relevant sind, sollten in (endgültige / schreibgeschützte) Mitgliedsvariablen des Ausnahmeobjekts kopiert werden. Am liebsten ist jedes einzelne denkbare bisschen davon. Auf diese Weise muss (oder sollte) keine Nachricht generiert werden, und daher können keine neugierigen Augen sie sehen.
Um auf die Besorgnis einzugehen, die Thomas Owens in einem der folgenden Kommentare zum Ausdruck gebracht hat:
Ja, natürlich, auf einer bestimmten Ebene, Sie werden eine Log - Nachricht in Bezug auf die Ausnahme erstellen. Aber Sie sehen bereits das Problem mit dem, was Sie sagen: Einerseits ist eine Ausnahmeprotokollnachricht ohne Stapelablaufverfolgung nutzlos, andererseits möchten Sie dem Benutzer nicht die gesamte Ausnahme-Stapelablaufverfolgung anzeigen lassen. Auch hier besteht unser Problem darin, dass unsere Perspektive durch traditionelle Praktiken verzerrt wird. Protokolldateien wurden traditionell im Nur-Text-Format erstellt, was vielleicht in den Kinderschuhen unserer Disziplin in Ordnung war, aber vielleicht auch nicht mehr: Wenn Sicherheitsbedenken bestehen, muss die Protokolldatei binär und / oder verschlüsselt sein.
Unabhängig davon, ob es sich um Binär- oder Nur-Text-Dateien handelt, sollte die Protokolldatei als Stream betrachtet werden, in den die Anwendung die Debuginformationen serialisiert. Ein solcher Stream ist nur für die Augen des Programmierers bestimmt, und das Generieren von Debugging-Informationen für eine Ausnahme sollte so einfach wie das Serialisieren der Ausnahme in den Debug-Protokoll-Stream sein. Auf diese Weise sehen Sie im Protokoll den Namen der Ausnahmeklasse (der, wie ich bereits ausgeführt habe, für alle praktischen Zwecke "die Nachricht" ist). und praktisch, um in ein Protokoll aufzunehmen, und die gesamte Stapelverfolgung. Beachten Sie, dass die Formatierung einer für Menschen lesbaren Ausnahmemeldung in diesem Prozess auffällig fehlt .
PS
Ein paar meiner Gedanken zu diesem Thema finden Sie in dieser Antwort: Wie schreibe ich eine gute Ausnahmebedingungsnachricht?
PPS
Es scheint, dass viele Leute von meinem Vorschlag zu binären Protokolldateien abgehakt wurden, deshalb habe ich die Antwort noch einmal geändert, um noch klarer zu machen, dass ich hier nicht vorschlage, dass die Protokolldatei binär sein soll, sondern dass Die Protokolldatei kann bei Bedarf binär sein.