Как запустить другой проект в решении в режиме отладки
У меня есть хост-приложение 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 довольно мощные. Я думаю, что вы могли бы довольно легко написать скрипт присоединения.