2016-10-30 1 views
1

Ich möchte wissen, ob es eine Möglichkeit gibt, C# zu verwenden, um einen Blue-Screen-Crash-Dump zu öffnen + Symbole zu laden, um den Speicherstapel abzurufen.Verwenden von C# zum Abrufen von Stack aus Bluescreen-Dump-Datei

Ich weiß, wie es manuell mit dem Programm windbg zu tun, also, wenn es eine Möglichkeit gibt, eine Verbindung zu Windbg mit C#, die das Problem auch lösen könnte.

Kann jemand den Speicherstapel mit C# extrahieren oder mit C# eine Verbindung zu Windbg herstellen?

Danke!

+0

Windbg verwendet Windows System dll, um den Speicherauszug zu extrahieren. Sie können also zu www.pinvoke.net gehen, um die C# -Schnittstellen zu den Windows-DLLs zu bekommen. Sie können bei pinvoke nach Debug suchen. – jdweng

+0

Sie können immer eine WinDbg [Skriptdatei] (https://msdn.microsoft.com/en-us/library/windows/hardware/ff560137 (v = vs.85) .aspx) erstellen und anschließend C# zum Erstellen des Prozesses verwenden mit der Befehlszeile 'windbg -cf meinscript.txt -logo mylogfile.txt' und dann' mylogfile.txt' mit Ihrer bevorzugten C# -Methode analysieren. –

+1

Ich würde die Skriptoption verwenden. Die P/Invoke-Option ist eine Herausforderung für die Debugger-Schnittstellen. –

Antwort

0

Vielen Dank für Ihre Hilfe, aber ich fand eine viel einfachere Art und Weise zu verwenden, es ... Da Windbg mit cmd bedient werden kann, war es ziemlich schwer, die Befehle zu finden und zu verstehen, aber ich konnte es mit cmd bedienen.

Danach ist es möglich, cmd Befehle von C# zu senden, also habe ich einfach den Befehl mit C# gesendet, und schrieb die Ergebnisse in Datei mit Windbg -logo Befehl.

Also durch das Lesen der Datei konnte ich die Ergebnisse analysieren und extrahieren die Dinge, die ich will.

Danke für die Hilfe!

0

Ich kenne keine C# -Lösung, aber PyKd (Python) kann tun, was Sie wollen. Während ich hauptsächlich PyKd als Plugin für WinDbg verwenden,

Es ist ein Python-Modul und kann

so gibt es keine Notwendigkeit für WinDbg in jedem Python-Skript verwendet werden.

Einige Befehle funktionieren möglicherweise nicht auf die gleiche Weise wie in WinDbg, z. dbgCommand() wird versuchen, einen Befehl des Debuggers auszuführen, was wahrscheinlich nicht möglich ist, wenn Sie ohne WinDbg arbeiten.

Von Ihrer Beschreibung benötigen Sie loadDump(), closeDump(), setSymbolPath() und setCurrentProcess(). Es gibt Klassen für Prozesse und Threads und die sp (Stapelzeiger) -Eigenschaft kann hilfreich sein.

Verwandte Themen