2016-08-03 2 views
1

Ich bin verantwortlich für eine Anwendung, die bekannt ist, diesen Fehler zu werfen.Wie zu diagnostizieren "Die Anweisung bei 0x ......... referenzierte Speicher bei 0x00000000"

The instruction at 0x09537333 referenced memory at 0x00000000. The memory could not be read.

Leider kann ich es selbst nicht replizieren.

Meine Frage ist, wie gehe ich über das Diagnostizieren/Debuggen dieses? Ich habe den Speicherort der fehlerhaften Anweisung, aber könnte ich möglicherweise zu einer Zeile in meinem Code zurückverfolgen? d.h. bezieht sich 0x09537333 auf den Speicherort relativ zu meiner Anwendung oder ist es innerhalb des Betriebssystems (Windows 7 Embedded)?

Gibt es eine andere Möglichkeit, weitere Informationen zu diesem Fehler zu erhalten? Gibt es bekannte Ursachen dafür, auf die ich in meinem Code achten sollte?

+0

Sie werden es nicht finden können, um die Ursache des Fehlers von nur - Sie müssen PDB-Dateien mit Ihrem exe enthalten, so im Falle eines Crashs werden Sie einen Stack-Trace erhalten. – auburg

+0

Hat Ihre App eine Minidump-Datei erstellt? Wenn ja, können Sie es in WinDbg laden und herausfinden, es ist jedoch eine ziemlich komplexe Operation. – DavidG

+0

'0x00000000' ist * null *: der Code bei' 0x09537333' Zugriff auf ein Null-Objekt oder etwas; oft ist die Startadresse '0x00400000' (* überprüfe das *, Windows kann auch einen anderen verwenden), so dass die RVA (relative virtuelle Adresse)' 0x09137333' ist (vorausgesetzt, dass die Startadresse '0040: 0000' ist), dann * pdb * oder andere Debug-Informationen, um RVA auf die Quellcodezeile abzubilden –

Antwort

1

Ich habe dieses Problem gelöst - hier sind einige Informationen, falls andere das gleiche Problem haben.

Haben ein bisschen mehr Forschung und festgestellt, dass dieser Fehler Zugriffsverletzung möglicherweise durch einen Fehler in einem Aufruf einen nicht verwalteten Funktion/Code (zB eine DLL in C++ geschrieben) verursacht werden könnte - try... catch würde in der Regel nicht diesen Fehler fangen , aber wenn die Datei app.config hinzugefügt wird:

<runtime> 
    <legacyCorruptedStateExceptionsPolicy enabled="true" /> 
</runtime> 

Das ist eine Möglichkeit.

Aber in meinem Fall wurde der Fehler von einem Thread verursacht, der für eine ungewöhnlich lange Zeit auf einem Formular ausgeführt wurde.

Das Formular wurde geschlossen, bevor es abgeschlossen wurde. Am Ende des Threads wurde versucht, einen Button im Formular auszublenden. Da das Formular jetzt Disposed wurde, wurde der Access Violation-Fehler ausgelöst.

Ich reparierte sie durch das Problem zu lösen, die den Thread verursachten so lange zu laufen, aber „nur für den Fall“, so

if (this.IsDisposed) 
{ 
    return; 
} 

... vor der Verarbeitung für die Taste auch.

0

Immer wenn 0x00000000 die Adresse ist, die nicht gelesen werden kann, haben Sie eine Nullzeiger-Dereferenzierung.

0

können Sie dieses Problem lösen, indem sie:

  1. Deinstallation problematische Software OR

  2. Treiber aktualisieren OR

  3. Folgen Sie den Anweisungen:
    Rechtsklick auf das Symbol von Arbeitsplatz t Gehen Sie zur Registerkarte Advanced und klicken Sie auf Einstellungen, die Sie unter Performance finden.

    Wechseln Sie dann erneut zur Registerkarte Erweitert, und klicken Sie unter virtuellen Speicher auf die Schaltfläche Ändern. Nach diesen Änderungen können Sie den Computer neu starten und das Problem sehen, wenn es weggeht.

Verwandte Themen