Подтвердить что ты не робот

Отладка: подключение к процессу для консольного приложения внутри cmd.exe

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

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

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

4b9b3361

Ответ 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 "" Как запустить автоматический отладчик" для получения дополнительной информации.