GFlags-Einstellung zum Abfangen von Heap-Beschädigungen (außer Seitenheap)?

An einem Produktionsstandort unsere Anwendung(*) stürzt wiederholt ab, aber nicht reproduzierbar. Die Analyse der Absturzabbilder zeigt deutlich, dass es sich um eine Heap-Beschädigung handelt: Die Abstürze befinden sich an verschiedenen Orten, greifen jedoch immer auf interne Verstöße zukernel32!HeapFree/ntdll!RtlpLowFragHeapFree. Gewinnen Sie Dbg!analyze -v meldet auch eine Heap-Beschädigung.

Was wir bisher versucht haben, ist die Anwendung mit dem auszuführenGFlags MöglichkeitSeitenhaufen. Das Problem ist, dass der Speicheraufwand für Page Heap so groß ist, dass die Anwendung nicht mehr funktioniert (Erreichen des virtuellen Speicherlimits für den 32-Bit-Prozess).

So,Wir können Page Heap nicht verwenden. Welche anderenFlaggen wäre sinnvoll hinzuzufügen damit wir auch nicht

einen Absturz an der Korruptionsstelle bekommenoder kann zumindest mehr Informationen aus einem Absturzspeicherauszug erhalten, der schließlich generiert wird, wenn wir abstürzenHeapFree?

Wir probieren gerade die Flaggen aus:

Aktivieren Sie das Heap-TaggingAktivieren Sie die Heap-Tail-Überprüfung

in der Hoffnung, dass der nächste Crash-Dump weitere Informationen darüber enthält, was schief gelaufen ist.

Ich habe über diese Flaggen nachgedacht, sie aber vorerst weggelassen:

Aktivieren Sie die Heap-Parameterprüfung ... Ich würde ziemlich viel Aufwand erwarten, wenn das System jedes Mal prüft, wenn eine Heap-Funktion aufgerufen wirdAktivieren Sie die Heap-freie Überprüfung ... Ich bin mir nicht sicher, ob mir das etwas bringen würdeAktivieren Sie die Heap-Validierung beim Aufruf ... hier warnen sogar die Docs vor dem hohen Overhead

Ein Problem, das ich (auch) habe, ist, dass ich nicht sicher bin, wie diese Flags helfen, wenn eine Speicherbeschädigung auftritt. Der Seitenhaufen erzeugt offensichtlich eine Zugriffsverletzung, wenn etwas in die Schutzseiten schreibt, aber wie funktionieren die anderen Flags?

Muss ich die App mit Application Verifier ausführen, damit diese anderen Flags helfen? Oder wird eine Ausnahme ausgelöst, wenn der Prüfcode etwas erkennt?

Welche Kombination dieser Flags ist am sinnvollsten, damit die Anwendung in der Produktion weiterhin mit guter Leistung und Speicherverbrauch ausgeführt werden kann?

(*): Es handelt sich um eine 32-Bit-Windows-Desktopanwendung für die industrielle Automatisierung. Läuft in diesem Fall auf Win7 64bit (was auch auf vielen anderen Sites gut funktioniert).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage