Vorbereiten der Verwendung von UMDH
Sie müssen die in diesem Abschnitt beschriebenen Konfigurationsaufgaben ausführen, bevor Sie user-Mode Dump Heap (UMDH) verwenden, um die Heap-Zuordnungen für einen Prozess zu erfassen. Wenn der Computer nicht ordnungsgemäß konfiguriert ist, generiert UMDH keine Ergebnisse, oder die Ergebnisse sind unvollständig oder falsch.
Erstellen der Stapelüberwachungsdatenbank für den Benutzermodus
Bevor Sie UMDH zum Erfassen der Heap-Zuordnungen für einen Prozess verwenden, müssen Sie Windows so konfigurieren, dass Stapelüberwachungen erfasst werden.
Verwenden Sie GFlags, um die Stapelüberwachungserfassung für einen Prozess zu aktivieren, um das Stapelüberwachungsdatenbank-Flag für den Benutzermodus für den Prozess festzulegen. Dies kann mit einer der folgenden Methoden erfolgen:
Wählen Sie in der grafischen Benutzeroberfläche von GFlags die Registerkarte "Bilddatei " aus. Geben Sie den Prozessnamen ein, einschließlich der Dateinamenerweiterung (z. B. Notepad.exe). Drücken Sie die TAB-TASTE, wählen Sie die Stapelüberwachungsdatenbank für den Benutzermodus erstellen aus, und wählen Sie dann "Übernehmen" aus.
Oder verwenden Sie die folgende GFlags-Befehlszeile, wobei ImageName der Prozessname ist (einschließlich der Dateinamenerweiterung):
gflags /i ImageName +ust
Standardmäßig ist die Menge der von Windows gesammelten Stapelablaufverfolgungsdaten auf 32 MB auf einem x86-Prozessor und 64 MB auf einem x64-Prozessor beschränkt. Wenn Sie die Größe dieser Datenbank erhöhen müssen, wählen Sie die Registerkarte "Bilddatei" in der grafischen Benutzeroberfläche von GFlags aus, geben Sie den Prozessnamen ein, drücken Sie die TAB-TASTE, aktivieren Sie das Kontrollkästchen "Stack Backtrace (Megs)", geben Sie einen Wert (in MB) in das zugehörige Textfeld ein, und wählen Sie dann "Übernehmen" aus.
Hinweis: Erhöhen Sie diese Datenbank nur bei Bedarf, da sie möglicherweise eingeschränkte Windows-Ressourcen aufgebraucht hat. Wenn Sie die größere Größe nicht mehr benötigen, geben Sie diese Einstellung an den ursprünglichen Wert zurück.
Diese Einstellungen wirken sich auf alle neuen Instanzen des Programms aus. Es wirkt sich nicht auf derzeit ausgeführte Instanzen des Programms aus.
Zugreifen auf die erforderlichen Symbole
Bevor Sie UMDH verwenden, müssen Sie Zugriff auf die richtigen Symbole für Ihre Anwendung haben. UMDH verwendet den durch die Umgebungsvariablen _NT_SYMBOL_PATH angegebenen Symbolpfad. Legen Sie diese Variable auf einen Pfad fest, der die Symbole für Ihre Anwendung enthält.
Wenn Sie auch einen Pfad zu Windows-Symbolen einschließen, ist die Analyse möglicherweise vollständiger. Die Syntax für diesen Symbolpfad entspricht dem, der vom Debugger verwendet wird. Weitere Informationen finden Sie unter Symbolpfad.
Wenn sich beispielsweise die Symbole für Ihre Anwendung unter "C:\MyApp\Symbols" befinden und Sie die Windows-Symboldateien auf \\myshare\winsymbols installiert haben, verwenden Sie den folgenden Befehl, um den Symbolpfad festzulegen:
set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols
Ein weiteres Beispiel: Wenn sich die Symbole für Ihre Anwendung unter C:\MyApp\Symbols befinden und Sie den öffentlichen Microsoft-Symbolspeicher für Ihre Windows-Symbole verwenden möchten, indem Sie C:\MyCache als Downstreamspeicher verwenden, verwenden Sie den folgenden Befehl, um den Symbolpfad festzulegen:
set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols
Wichtig : Sie haben zwei Computer: einen Protokollierungscomputer , auf dem Sie ein UMDH-Protokoll und einen Analysecomputer erstellen, auf dem Sie das UMDH-Protokoll analysieren. Der Symbolpfad auf Dem Analysecomputer muss auf die Symbole für die Windows-Version verweisen, die zum Zeitpunkt der Ausführung des Protokolls auf dem Protokollierungscomputer geladen wurde. Zeigen Sie nicht auf den Symbolpfad auf dem Analysecomputer auf einen Symbolserver. Wenn Sie dies tun, ruft UMDH Symbole für die Version von Windows ab, die auf dem Analysecomputer ausgeführt wird, und UMDH zeigt keine aussagekräftigen Ergebnisse an.
Deaktivieren der BSTR-Zwischenspeicherung
Die Automatisierung (früher als OLE-Automatisierung bezeichnet) speichert den von BSTR-Zeichenfolgen verwendeten Speicher zwischen. Dadurch kann UMDH daran gehindert werden, den Besitzer einer Speicherzuweisung richtig zu ermitteln. Um dieses Problem zu vermeiden, müssen Sie die BSTR-Zwischenspeicherung deaktivieren.
Um die BSTR-Zwischenspeicherung zu deaktivieren, legen Sie die OANOCACHE-Umgebungsvariable auf 1 (1) fest. Diese Einstellung muss vor dem Starten der Anwendung erfolgen, deren Zuordnungen nachverfolgt werden sollen.
Alternativ können Sie die BSTR-Zwischenspeicherung innerhalb der Anwendung selbst deaktivieren, indem Sie die .NET Framework SetNoOaCache-Funktion aufrufen. Wenn Sie diese Methode auswählen, sollten Sie diese Funktion frühzeitig aufrufen, da alle BSTR-Zuordnungen, die beim Aufrufen von SetNoOaCache bereits zwischengespeichert wurden, zwischengespeichert bleiben.
Wenn Sie die von einem Dienst vorgenommenen Zuordnungen nachverfolgen müssen, müssen Sie OANOCACHE als Systemumgebungsvariable festlegen und Windows dann neu starten, damit diese Einstellung wirksam wird.
Suchen der Prozess-ID
UMDH identifiziert den Prozess anhand seiner Prozess-ID (PID). Sie können die PID eines beliebigen ausgeführten Prozesses mithilfe von Task-Manager, Tasklist oder TList finden.