Использование С# для извлечения стека из файла дампа синего экрана

Я хочу знать, есть ли способ использовать С# для открытия аварийного дампа синего экрана + символы загрузки, чтобы получить стек памяти.

Я знаю, как это сделать вручную с помощью программы Windbg. Поэтому, если есть способ подключиться к Windbg с помощью C#, это также может решить проблему.

Кто-нибудь знает, как извлечь стек памяти с помощью С# или подключиться к Windbg с помощью С#?

Спасибо!


person Community    schedule 30.10.2016    source источник
comment
Windbg использует Windows System dll для извлечения дампа. Таким образом, вы можете перейти на сайт www.pinvoke.net, чтобы получить интерфейсы С# для библиотек DLL Windows. Вы можете выполнить поиск в pinvoke для отладки.   -  person jdweng    schedule 30.10.2016
comment
Вы всегда можете создать сценарий WinDbg файл, а затем с помощью C# создайте процесс с командной строкой windbg -cf myscript.txt -logo mylogfile.txt, а затем проанализируйте mylogfile.txt с помощью вашего любимого метода C#.   -  person seva titov    schedule 30.10.2016
comment
Я бы использовал вариант сценария. Параметр P/Invoke является сложной задачей для интерфейсов отладчика.   -  person Steve Johnson    schedule 31.10.2016
comment
Обратите внимание, что есть CorDbg и MDbg, где MDbg написан на C# (менее powerpul, чем CorDbg), но оба они предназначены для отладки управляемого кода, а не аварийного дампа.   -  person Thomas Weller    schedule 31.10.2016


Ответы (3)


Я не знаю никакого решения C#, но PyKd (Python) может делать то, что вы хотите. Хотя я в основном использую PyKd как плагин для WinDbg,

Это модуль Python, который можно использовать в любом скрипте Python.

так что нет необходимости в WinDbg.

Однако некоторые команды могут работать не так, как в WinDbg, например. dbgCommand() попытается выполнить команду отладчика, что, вероятно, невозможно, если вы работаете без WinDbg.

Судя по вашему описанию, вам понадобятся loadDump(), closeDump(), setSymbolPath() и setCurrentProcess(). Существуют классы для процессов и потоков, и может оказаться полезным свойство sp (указатель стека).

person Thomas Weller    schedule 31.10.2016

Если вы хотите начать с нуля и использовать интерфейсы dbgeng в С#, вы можете попробовать расширить этот код, который я собрал.

https://github.com/blabberer/chashdbg

person blabb    schedule 31.10.2016

Спасибо за вашу помощь, но я нашел гораздо более простой способ его использования... Поскольку Windbg можно использовать с помощью cmd, было довольно сложно найти и понять команды, но мне удалось управлять им с помощью cmd.

После этого можно отправлять команды cmd из C#, поэтому я просто отправил команду с помощью C# и записал результаты в файл с помощью команды Windbg -logo.

Таким образом, прочитав файл, я смог проанализировать результаты и извлечь то, что мне нужно.

Спасибо за помощь!

person Community    schedule 01.11.2016