Отладка: Присоединение для Обработки для Консольного Приложения, работающего в cmd.exe

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

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

Действительно ли это возможно?

26
задан Chris 3 May 2010 в 21:11
поделиться

5 ответов

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

  • Используйте опцию "Debug -> Command line arguments" в Visual Studio;
  • Используйте "Debug -> Attach to process" и найдите ваш процесс; это не cmd.exe, а процесс с исполняемым именем типа "MyProject.exe". Вы можете использовать Process Explorer или другой диспетчер задач с поддержкой "древовидного представления", чтобы легко найти идентификатор процесса - просто поищите процессы, запущенные вашим cmd.exe.
  • Поместите Debugger.Break() в ваш код - когда этот метод будет выполнен, система запустит диалог с предложением выбрать, какой экземпляр Visual Studio использовать для отладки (вы можете выбрать тот, в котором уже открыт ваш проект).
30
ответ дан 28 November 2019 в 07:31
поделиться

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

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

1
ответ дан 28 November 2019 в 07:31
поделиться

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

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

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

0
ответ дан 28 November 2019 в 07:31
поделиться

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

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

Чтобы отлаживать из командной строки, а не использовать дебри графического интерфейса VS:

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

  • введите vsjitdebugger/?, что даст вам пример команды типа :

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

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

c:> tasklist | find /i "web"

5
ответ дан 28 November 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: