GFlags festlegen zu erwischen heap-Beschädigung (mit Ausnahme der Seite Heap)?

Auf einer Produktionsstätte unserer Anwendung(*) stürzt regelmäßig ab, aber nicht reproduzierbar. Die Analyse der crash-dumps zeigt deutlich, dass es einen Haufen Korruption: Die Abstürze sind bei anderen Ort, aber immer Zugriffsverletzungen innerhalb kernel32!HeapFree/ntdll!RtlpLowFragHeapFree. Win Dbg !analyze -v auch Berichte zu einer heap-Beschädigung.

Was wir bisher ausprobiert haben, ist zum ausführen der Anwendung mit der GFlags option Seite Heap. Das problem ist, dass der Speicherbedarf der Seite Heap ist so, dass die Anwendung nicht mehr betreiben (schlagen virtual memory limit für die 32-bit-Prozess).

So, wir nicht verwenden, Seite Heap. Die anderen flags wäre nützlich, hinzufügen, so dass wir entweder

  • Holen Sie sich ein crash an der Korruption Seite
  • oder zumindest können Sie mehr info aus einem crash-dump, wird schließlich erzeugt, wenn wir Abstürzen in HeapFree?

Sind wir derzeit erproben die Fahnen:

in der Hoffnung, dass der nächste crash dump enthält ein paar mehr Informationen, was falsch gelaufen ist.

Als ich diese Fahnen, aber ließ sich für jetzt:

Ein problem, das ich (auch) haben, ist, dass ich bin mir nicht sicher, wie diese Fahnen, die helfen, wenn eine Speicherbeschädigung auftreten. Seite Heap offensichtlich wird eine Zugriffsverletzung generiert, wenn Sie schreibt etwas in die guard-Seiten, aber wie gehen die anderen flags funktionieren?

Muss ich die app starte mit Application Verifier für diese anderen Flaggen, um zu helfen? Oder wird eine Ausnahme ausgelöst, wenn die überprüfung der code erkennt etwas?

Welche Kombination dieser flags macht am meisten Sinn, so dass die Anwendung weiterhin ausgeführt, mit OK performance-und memory-Verbrauch in der Produktion?



(*) : Es ist eine 32bit Windows-desktop-Anwendung in der industriellen Automatisierung. Läuft auf Win7 64bit in diesem Fall (der es einfach gut tut, an eine ganze Menge von anderen Seiten).

  • Tatsächlich glaube ich, dass die Page Heap option würde Ihre beste Wette. Wenn Sie dies nicht bereits getan haben, könnten Sie versuchen, um Ihren Prozess large adress aware. Hoffentlich gibt Sie genug Speicher, um tatsächlich die Flagge.
InformationsquelleAutor Martin Ba | 2013-09-26
Schreibe einen Kommentar