2014-10-14 2 views
2

Мне нужно выполнить команду WinDbg через C#. Чтобы быть более ясным, откройте WinDbg через C# в фоновом режиме, выполните команду в командной строке windbg и закройте приложение windbg. Предоставляет ли C# какие-либо API-интерфейсы для этого?Выполнение команды WinDbg через C#

+0

Что вы нашли до сих пор? –

+0

Вы пытаетесь выполнить что-то в windbg против своего * собственного процесса или другого? –

+0

Я создаю пользовательские команды с помощью WinDbg. Кроме того, вместо того, чтобы перейти в командную строку WinDbg и выполнить эти команды, мне нужно выполнить их при нажатии кнопки в графическом интерфейсе, созданном с использованием C# –

ответ

3

Если вы действительно хотите использовать графический интерфейс, просто используйте переключатель -c, чтобы передать команду в окно. Командная строка Примера прикрепить к Калькулятору и сбросить стек:

windbg.exe -pn calc.exe -c "kb" 

Это оставляет Windbg открытым и прикреплены к калькулятору, отображая результат выполнения kb.

Если вам не нужен графический интерфейс Windbg и вам просто нужно выполнить команду, чтобы получить его вывод, используйте CDB (эквивалент отладчика командной строки).

cdb.exe -pn calc.exe -c "kb; qd" 

Так вот, команда в кавычках после -c выполняется после присоединения к процессу с именем (из-за -pn) «calc.exe».

В любом случае, если вы вместо того, чтобы иметь идентификатор процесса (PID), используйте -p:

cdb.exe -p 1164 -c "kb; qd" 

Как для запуска его из C#, самый простой способ начать Process и прочитать вывод консоли. См. this answer для готового решения.

+0

В последнем предлагаемом вами решении, т. Е. Создании процесса, прекрасно, но любая идея о том, как предоставить команду для выполнения в качестве входа в WinDbg –

+0

См. Отредактированный ответ –

+0

Да, отличный ответ, похоже, работает, но любой другой подход без создания процессов –

0

Нет, у C# нет API для запуска или управления WinDbg.

Вы можете использовать общее назначение Process.Start, чтобы запустить WinDbg и передать ему сценарий.

+0

Не могу ли я использовать расширение DLL уже написанное и импортировать эту DLL в C#? –

+0

Как передать скрипт? –

+0

Вы имеете в виду, что [Параметры командной строки WinDbg] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff561306%28v=vs.85%29.aspx)? Или [как передать параметры командной строки в Process.Start] (http://stackoverflow.com/questions/5168612/launch-program-with-parameters)? Или что-то другое? –

0

Вы можете выполнить код C# из командной строки Windbg, а подход - написать плагин для Windbg. Не уверен, что это тот подход, который вам нужен, но если это так, то post как это сделать.

+0

Вызов C# из WinDbg, я могу написать DLL-расширение WinDbg, но мое требование выполняет команду WinDbg из приложения C#. –

0

см: https://powerdbg.codeplex.com/
это не C#, но это> сети и может быть, вы обнаружите подход

Если вы готовы изменить С # на питон см https://pykd.codeplex.com

И, наконец, вы можете использовать собственные dlls DbgEng/DbgHlp из управляемого кода

+0

Есть идеи по использованию родных DLL DbgEng/DbgHlp из управляемого кода? –

0

Naitive отладчик двигателя не может быть использована, если вы не обернуть его вокруг C++/CLI фотографии mdbglib https://mdbglib.codeplex.com Это отладчик написал такую ​​моду

Смежные вопросы