Как запустить другой проект в решении в режиме отладки

У меня есть хост-приложение WCF, которое запускается исполняемым файлом с некоторыми динамическими параметрами.

Теперь я хочу отладить это приложение, но поскольку оно запускается другим инструментом, VS.NET не будет загружать его в режиме отладки.

Можно ли написать какой-то код только для DEBUG, чтобы заставить его выполнить этот процесс в режиме DEBUG, чтобы он достиг точек останова.

В настоящее время он использует Process.Start() запустить хост-приложение.

Прикреплять его к отладчику каждый раз не вариант, я ищу более практичное решение.

4 ответа

Решение

Попробуйте добавить эту строку в ваше приложение WCF:

System.Diagnostics.Debugger.Launch();

Если приложение не работает под отладчиком, вы получите окно с вопросом, хотите ли вы отладить приложение.

Вы можете сделать это без изменения исходного кода. Откройте автоматически запущенный проект в Visual Studio и установите точку останова. Запустите Regedit.exe и добавьте ключ в "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ Опции выполнения файла образа" с тем же именем, что и ваш.exe. Добавьте новое строковое значение с именем "Отладчик", установите для него "c:\Windows\system32\vsjitdebugger.exe". Пример файла.reg:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ConsoleApplication1.exe]
"Debugger"="\"c:\\Windows\\system32\\vsjitdebugger.exe\""

Теперь, когда ваше приложение запускает процесс, появляется приглашение отладчика JIT. Выберите экземпляр Visual Studio, в который загружен автоматически запущенный проект. Выполнение остановится в точке останова. Обратите внимание, что вам обычно приходится снова менять фокус на VS.

Майк Сталл предупредил, что этот трюк не работает только для управляемой отладки. Я не могу воспроизвести это, он отлично работает в VS2008 SP1.

#if debug

// Do stuff
if(!System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Launch();
}
System.Diagnostics.Debugger.Break();

#endif

Макросы VS.NET довольно мощные. Я думаю, что вы могли бы довольно легко написать скрипт присоединения.

Другие вопросы по тегам