Отладка: присоединение к процессу для консольного приложения, запущенного внутри cmd.exe - PullRequest
26 голосов
/ 04 мая 2010

Как вы «Присоединитесь к процессу ...» для консольного приложения, которое запускается из окна CMD и не запускается F5?Причина, по которой я спрашиваю, заключается в том, что приложение принимает аргументы командной строки, и я хочу получить подлинный опыт.

Я даже подключился к CMD.exe, но не повезло, или установил точку останова с помощью Console.ReadKey() также не повезло.Я немного растерялся.

Возможно ли это?

Ответы [ 6 ]

30 голосов
/ 18 мая 2010

У вас есть несколько вариантов:

  • Использовать опцию «Отладка -> Аргументы командной строки» в Visual Studio;
  • Используйте «Отладка -> Присоединить к процессу» и найдите свой процесс; это не cmd.exe, а процесс с исполняемым именем, таким как «MyProject.exe». Вы можете использовать Process Explorer или другой диспетчер задач с поддержкой «древовидного представления», чтобы легко найти идентификатор процесса - просто найдите процессы, запущенные вашим cmd.exe.
  • Поместите Debugger.Break () в ваш код - когда этот метод будет запущен, система откроет диалоговое окно с просьбой выбрать, какой экземпляр Visual Studio использовать для отладки (вы можете выбрать тот, у которого уже открыт проект) .
5 голосов
/ 18 мая 2010

Для отладки из командной строки вместо использования лабиринта VS GUI:

  • Запуск командной строки Visual Studio

  • type vsjitdebugger /? , который дает пример команды, такой как:

c:> vsjitdebugger [AppName] [Args]: запустить указанный исполняемый файл и подключиться к отладчику

  • , набрав tlist или tasklist , даст вам PID для присоединения к существующим процессам. пример:

c:> список задач | find / i "web"

2 голосов
/ 04 мая 2010

Возможно, конечно. Попробуйте один из этих двух:

  1. Запустите процесс, затем перейдите в Debug-> Attach и найдите процесс. Возможно, вам придется обновить, чтобы увидеть это.
  2. Добавьте оператор "Debugger.Break ()" в код, если это возможно; это автоматически сломается (но обязательно удалите его или окружите его директивами препроцессора, чтобы оно не попало в рабочий код).
1 голос
/ 04 мая 2010

Как уже говорили другие, вы можете указать аргументы командной строки stratup из проекта и просто начать отладку в Visual Studio.

Если вы все еще хотите подключиться к работающему приложению, вам необходимо присоединитьотладчик для MyApp.exe (как бы ни называлось ваше приложение - исполняемый файл, скомпилированный в каталог bin \ debug), а не cmd.exe.Присоединение к cmd.exe это присоединение к командному процессу, а не процессу вашего приложения.

0 голосов
/ 04 сентября 2014

Просто добавьте запись реестра для имени вашего exe-файла в «HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ параметры выполнения файла образа», добавив в него ключ «отладчик», оцениваемый как «vsjitdebugger.exe», вы можете увидеть появится диалоговое окно с просьбой выбрать версию VS для отладки при запуске exe.

см. MSDN " Как: автоматически запустить отладчик " для получения дополнительной информации.

0 голосов
/ 04 мая 2010

В разделе «Отладка» настроек проекта есть текстовое поле «Аргументы командной строки:». Когда отладчик VS запускает программу на C #, он передает эти аргументы процессу так же, как если бы программа была запущена из командной строки с этими аргументами.

Альтернатива - использовать отладчик командной строки. Здесь есть несколько вариантов, но, если честно, они, вероятно, не то, что вы хотите использовать вместо VS, если только вы не попадаете в некоторые действительно сложные сценарии отладки. Если вы хотите проверить их, в этом SO-ответе есть хорошее резюме:

Вы также можете попробовать методику вызова System.Diagnostics.Debugger.Break() на ранней стадии инициализации - если программа работает под отладчиком, она сломается, если она не работает под отладчиком, вас должны спросить, хотите ли вы прикрепить один. Вы можете сделать вызов условно в зависимости от файла конфигурации или параметра переменной среды, поэтому вы получите разрыв только в том случае, если он действительно вам интересен (несколько навязчиво, но не так уж плохо).

...