Frage

Ich bin Debuggen eine Software, die schließlich mit einem der folgenden Meldungen stürzt ab:

1. DAMAGE: after normal block (#24729280) at 0x00D710E0
2. Debug Assertion Failed
   Program: D:\Soft\Test.exe
   File: dbgheap.c
   Line: 1017

   Expression: _BLOCK_TYPE_IS_VALID(phead->nBlockUse)

Diese Software ist wirklich alt, aber es jetzt ist keine Option zu ändern. Es ist auf Visual C ++ geschrieben 6.0. Wir raten, es ist eine Art von Pufferüberlauf ist, so dass wir versuchen, Wege zu finden, zu erkennen, wo es passiert ist.

Ich habe gefunden, Informationen über PageHeap (die mich in der Lage sein scheint zu sagen, was ich will) und GFlags , aber es ich scheint kann es nicht funktionieren.

Ich habe ein Testprogramm:

char* test;
test = new char[5];
test[5] = 'a';
delete[] test;

was löst einen Fehler:

DAMAGE: after normal block (#55) at 0x1671920

Dann habe ich versucht, Anbringen PageHeap es durch Ausführen von:

gflags.exe /p /enable MemoryTest.exe /full

und dann erneut ausführen es (sowohl durch Visual C ++ 6.0-Schnittstelle und über den Windows-Explorer), die auf dem gleichen Fehler geführt hat.

Dann habe ich versucht, die Release-Version zu kompilieren, und es lief durch das Visual C ++ 6.0-Schnittstelle, den Fehler zu erhalten:

User breakpoint called from code at 0x7c90120e

Und aus dem Windows Explorer, ich habe gerade das Fenster Dialog fragte mich, einen Fehlerbericht zu senden.

Was bin ich fehlt?

War es hilfreich?

Lösung

Sie können Ihre Anwendung im Release-Modus, indem es an Windbg laufen.

  • Aktivieren Sie die gflags (Wie Sie genannt)
  • Starten Sie die Anwendung in Release Modus.
  • Bringen Sie es zu Windbg mit Attach to process Option in Windbg.
  • Konfigurieren Sie den richtigen Pfad für Release PDBs.
  • Neu laden die PDB manuell mit .reload /f bei automatischen Laden fehlschlägt.
  • Führen Sie den Anwendungsfall.

WinDbg würde die Ausführung stoppen, wenn eine Ausnahme auftritt. Für jede erste Chance, analysieren, die Gründe. Es könnte einer der Fehler für Absturz sein.

Andere Tipps

Vor der Verwendung von gflags / PageHeap Ich schlage vor, Sie für Zugriffsverletzung Ausnahme zu überprüfen. Zuerst den Prozess anhängen, indem Sie Build-> Start Debug-> Attach Option zu verarbeiten. Sobald es angebracht, um die Zugriffsverletzungsausnahme aktivieren, indem Sie Debug- gehen> Ausnahmen wählen Zugriffsverletzung und das Kontrollkästchen Stopp Immer. Prüfen Sie dann, ob der Debugger keine Zugriffsverletzung Ausnahmen abfängt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top