Sie haben versendet, Asserts sind deaktiviert, Sie erhalten einen seltenen Absturzbericht, der angibt, dass in Ihrem Code eine Nullzeigerverletzung aufgetreten ist. In einer Entwicklungsumgebung wäre das Problem von einer Behauptung erfasst worden.
Sie haben lediglich einen Absturzbericht, sodass eine Reproduktion des Problems nahezu unmöglich ist. Das Folgen der Rückverfolgung gibt keine Hinweise darauf, warum der Absturz überhaupt passiert ist.
Optionen: - Zeigerprüfung hinzufügen, um den Absturz zu verhindern. Dies wird den Absturz verhindern, aber Sie werden wahrscheinlich nicht einmal herausfinden, warum es überhaupt passiert ist. - lass es fliegen, hoffe es passiert wieder mit einem Repro-Szenario
Angenommen, die Anwendung ist nicht für eine Lenkwaffe oder ein automatisches Bremssystem vorgesehen ...
Welches würdest du nehmen?
Antworten:
Ich habe den zweiten Ansatz gewählt. Es macht keinen Sinn, den Absturz auszublenden, wenn der NULL-Zeiger an dem Punkt, an dem der Absturz aufgetreten ist, unerwartet war. Dieser NULL-Zeiger ist in den meisten Fällen nur eines der Symptome dafür, dass etwas anderes nicht stimmt. Wenn wir es mit einem NULL-Zeiger ausblenden, ist es fast sicher, dass etwas anderes kaputt geht. Ich denke, Sie haben eine bessere Chance, das Szenario zu erfassen, wenn Sie den Punkt kennen, an dem es jedes Mal stattdessen an einem zufälligen Ort abstürzt.
quelle
Wie oft tritt der Absturz auf? Es passiert nur für einen von vielen Kunden in einem obskuren Fall? Was sind die Folgen (Datenverlust, Systemabsturz)? Wenn es in einer Million Fällen alle 1 passiert und die Anwendung nur neu gestartet werden muss und keine Daten verloren gehen, müssen Sie sie wahrscheinlich nicht reparieren - lassen Sie es so.
Wie teuer (Geld und Zeit) ist es, die Asserts hinzuzufügen und an alle Kunden zu versenden (wenn nur ein Teil der Kunden die neue Version erhält, kann der Rest in das nicht überprüfte Nullproblem geraten)? Wie hoch sind die Chancen, das Problem zu finden? Wenn Sie den Code nur nach dem Zufallsprinzip überprüfen, um den Fehler zu erkennen, ist dies eine schlechte Vorgehensweise ...
Kann das Problem auf dem Computer des Kunden reproduziert werden? Können Sie auf diese Maschine zugreifen? Das könnte wirklich wertvoll sein
Überprüfen Sie Ihre Absturzberichte und stellen Sie sicher, dass die bereitgestellten Informationen nützlich sind und Ihnen bei der Diagnose des Problems helfen können
quelle
In einer bestimmten Reihenfolge wäre es abgefangen und behoben worden, aber die aktuelle Rückverfolgung wurde nie abgefangen.
Sie sollten in der Lage sein zu sehen, was mit dem Absturzspeicherauszug schief gelaufen ist, haben Sie Parameter überprüft usw.?
Die Extras, die basierend auf der Zeit ausgeführt werden können, die Sie dafür verwenden möchten:
Archivieren Sie den Absturzspeicherauszug und verweisen Sie im Code mit einem Kommentar auf die Zeile, in der er abgestürzt ist.
Dadurch kann einer, der einen sehr ähnlichen Speicherauszug untersucht, feststellen, dass er bereits vor ...
[Zeitaufwand: kurz]
Zusätzliche Überprüfungen, Protokollierung, ... Sie möchten dies verhindern und beim nächsten Mal weitere Informationen erhalten.
[Zeitaufwand: mittel]
Stellen Sie sicher, dass die Anwendung nicht auf diese Weise aufgerufen werden kann, damit dieser Verstoß auftritt.
[Zeitaufwand: lang]
quelle
In diesen Tagen versende ich mit aktiviertem assert (). Es kostet nicht viel und kann das Leben in feindlichen Situationen viel einfacher machen (dh die Umgebungen Ihrer Kunden sind oft feindlicher als Ihre Entwicklungs- oder QS-Umgebungen).
quelle