Gibt es eine Möglichkeit, einen memory zu replizieren kann nicht gelesen werden Fehlermeldung in meiner C # -Anwendung?

Dies ist eines dieser Probleme, die dich dazu bringen, ein schönes Stück Seil zu finden. Dieses Problem ist ärgerlicher als ein Schwager, der unangekündigt aufhört, Geld zu leihen.

Lassen Sie mich im Voraus sagen, dass ich wirklich jede mögliche Unterstützung auf diesem Problem schätze.

Ich habe eine C # (2.0) Anwendung. Dies ist eine relativ einfache Anwendung, die gespeicherte Prozeduren basierend auf einer XML-file ausführt, die als Befehlszeilenparameter übergeben wird.

Wir verwenden es als Werkzeug, um verschiedene gespeicherte Prozeduren aufzurufen. Diese Anwendung macht einige logging und funktioniert zum größten Teil sehr gut.

Die Anwendung liest den Namen der gespeicherten Prozeduren und die Parameter aus einer XML-file. Es richtet eine Verbindungszeichenfolge und ein SQL-Befehlsobjekt (System.Data.SqlClient.SqlCommand) ein.

Dann läuft die gespeicherte Prozedur mit der ExecuteReader-Methode.

Leider hat diese Anwendung bei einer Handvoll Gelegenheit folgende Fehlermeldung:

“Application popup: StoredProcLauncher.exe - Application Error : The instruction at "0x7c82c912" referenced memory at "0x00000000". The memory could not be "read” 

Dieser Fehler ist auf mehreren servern aufgetreten, also muss es ein Code-Problem sein.

Es scheint, dass, wenn unser Produktionsserver eine bestimmte Nummer rollt, es diesen memoryerrors austriggers.

Das Problem ist, dass ich dieses Problem nicht bei der Entwicklung sehe. Ich kann es nicht replizieren, damit ich stecke.

Gibt es eine Möglichkeit, diesen Fehler zu simulieren. Kann ich den memory auf meinem lokalen PC irgendwie ausfüllen, um zu versuchen, diesen Fehler zu replizieren?

Kennt jemand irgendwelche gängigen Codierungsprobleme, die zu einem solchen Fehler führen könnten?

Hat jemand etwas Seil, das ich ausleihen kann?

   

Eine Möglichkeit, dies zu tun ist, um die beleidigenden Code in einem try-catch-Block und Schreiben der Stack-Trace und Fehlermeldung an die Windows-Anwendung Ereignisprotokoll, Textdatei, E-Mail, etc.

Dies gibt Ihnen einige Zeilennummern und zusätzliche Informationen.

Beachten Sie auch, dass Sie diese im Debug-Modus bereitstellen müssen oder zumindest die .pdb-file mit der Anwendung exe / dll kopieren, damit sie die Debug-Symbole erhalten kann. Ich kann mich nicht daran erinnern, dass ich in den Kopf gehe, wie das funktioniert, aber ich denke, wenn du im Freigabemodus einsetzst, kannst du einige wertvolle Debug-Informationen verlieren.

Die statement bei "0x7c82c912" verwies auf memory bei "0x00000000"

Dies ist eine Zugriffsverletzung :

Eine Zugriffsverletzung tritt in nicht verwaltetem oder unsicheren Code auf, wenn der Code versucht, in den memory zu lesen oder zu schreiben, der nicht zugewiesen wurde oder auf den er keinen Zugriff hat. Dies geschieht normalerweise, weil ein pointers einen schlechten Wert hat.

Warum hat Ihr Programm nicht verwalteten / unsicheren Code? Um das zu tun, was du beschrieben hast, braucht es keinen nativen Code.

Leider ist der Code abstürzt und jetzt ist nicht die time zu fragen, wie ist am Ende nennen native Code. Um das Problem zu lösen, musst du einen Müll fangen und den Müll parsing. Siehe Capturing Application Crash Dumps . Es gibt Werkzeuge, die sich darauf spezialisieren, wie Breakpad . Es gibt auch Dienste, die Ihnen helfen können, zu sammeln und zu verfolgen Abstürze aus Ihrer App generiert, wie crittercism.com oder AirBrake . Ich habe sogar einen für mich selbst erstellt und es öffentlich gemacht bugcollect.com .