Отладка: подключение к процессу для консольного приложения внутри cmd.exe
Как вы подключаетесь к процессу... для консольного приложения, которое запускается из окна CMD и не запускается F5? Причина, по которой я спрашиваю, заключается в том, что приложение принимает аргументы командной строки, и я хочу иметь настоящий опыт.
Я даже привязываюсь к CMD.exe
, но не повезло, или установил точку останова с помощью Console.ReadKey()
, также не повезло. Я немного растерялся.
Возможно ли это?
Ответы
Ответ 1
У вас есть несколько вариантов:
- Используйте опцию "Отладка → Параметры командной строки" в Visual Studio;
- Используйте "Debug → Attach to process" и найдите свой процесс; это не cmd.exe, а процесс с исполняемым именем, например "MyProject.exe". Вы можете использовать Process Explorer или другой диспетчер задач с поддержкой "tree view", чтобы легко найти идентификатор процесса - просто найдите процессы, запущенные вашим cmd.exe.
- Поместите Debugger.Break() в ваш код - когда этот метод будет выполнен, система запустит диалоговое окно с просьбой выбрать, какой экземпляр Visual Studio использовать для отладки (вы можете выбрать тот, который уже открыт для вашего проекта).
Ответ 2
Отладка из командной строки, а не использование лабиринта VS GUI:
-
Запустите командную строку Visual Studio
-
введите vsjitdebugger/?, который дает вам пример команды, например:
c: > vsjitdebugger [AppName] [Args]: Запустить указанный исполняемый файл и прикрепить к отладчику
- ввод tlist или списка задач даст вам PID для присоединения к существующим процессам. Пример:
c: > список задач | find/i "web"
Ответ 3
Это возможно, конечно. Попробуйте выполнить одно из следующих действий:
- Запустите процесс, затем перейдите в Debug- > Attach и найдите процесс. Возможно, вам придется обновиться, чтобы увидеть его.
- Добавить "Debugger.Break()" в коде, если это возможно; который будет автоматически разбиваться (но обязательно удалите его или окружите его директивами препроцессора, чтобы он не попал в производственный код).
Ответ 4
Как говорили другие, вы можете указать аргументы командной строки stratup из проекта и просто начать отладку в Visual Studio.
Если вы все еще хотите подключиться к запущенному приложению, вам необходимо прикрепить отладчик к MyApp.exe(независимо от того, что вы вызываете, - exe, который скомпилирован в каталог bin\debug), а не cmd.exe. Присоединение к cmd.exe, связанное с процессом команды, а не с процессом вашего приложения.
Ответ 5
В разделе "Отладка" параметров проекта есть текстовое поле для "Аргументы командной строки:". Когда отладчик VS запускает программу С#, он передаст эти аргументы процессу так же, как если бы программа была запущена из командной строки с этими аргументами.
Альтернативой является использование отладчика командной строки. Здесь есть несколько вариантов, но, честно говоря, они, вероятно, не то, что вы хотите использовать вместо VS, если вы не входите в некоторые действительно волосатые сценарии отладки. Если вы заинтересованы в их проверке, в этом SO ответят хорошее резюме:
Вы также можете попробовать технику посылки вызова System.Diagnostics.Debugger.Break()
в начале вашей инициализации - если программа запущена под отладчиком, она сломается, она не будет работать под отладчиком, вас спросят, хотите ли вы чтобы прикрепить его. Вы можете сделать вызов условно в зависимости от настройки файла конфигурации или среды, так что вы получите только перерыв, если вы действительно заинтересованы в нем (несколько навязчивый, но не очень плохой).
Ответ 6
Просто добавьте запись реестра для своего имени exe в "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\образ файла", добавив в нее ключ "отладчика", оцененный с помощью "vsjitdebugger.exe", вы можете видеть появляется диалоговое окно с просьбой выбрать версию VS для отладки при запуске exe.
см. MSDN "" Как запустить автоматический отладчик" для получения дополнительной информации.