Отладка исполняемого файла C #, который вылетает при запуске - PullRequest
7 голосов
/ 09 ноября 2010

Я пытаюсь удаленно отладить программу на C #.Подключение к хосту не является проблемой, и я вижу все процессы, запущенные на этой машине, и могу подключиться к msvsmon.exe .

Однако программа, которую я хочу отладить, вылетаетсразу после запуска, не давая мне времени присоединиться к нему.Также запуск рассматриваемого отладочного исполняемого файла через удаленное местоположение ничего не делает.Как я могу подключить отладчик до сбоя?

Ответы [ 3 ]

13 голосов
/ 10 ноября 2010

Один из моих любимых приемов подключения отладчика при запуске программы - использование Image File Execution Options. Это средство реестра, которое позволяет, помимо прочего, подключить отладчик к приложению перед его выполнением. Тот же прием позволяет, например, заменить диспетчер задач Windows на Process Explorer или Notepad.exe на Notepad2 .

Вы можете прочитать все об этом здесь .

Вот как это настроить:

  • Выполнить regedit.exe
  • Перейти к HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • Создайте новый ключ с именем exe (пример: yourprogram.exe)
  • Создайте новое строковое значение под вашим exe. Имя строкового значения Debugger, а значение vsjitdebugger.exe

Когда вы запустите исполняемый файл, вы увидите приглашение Just In Time с просьбой выбрать отладчик:

vsjitdebugger

Пока это диалоговое окно открыто, прикрепите его к процессу удаленно и нажмите No в диалоговом окне.

Надеюсь, это поможет.

10 голосов
/ 09 ноября 2010

Сбой при запуске может быть из-за отсутствия зависимости. Запустите fuslogvw.exe перед запуском приложения и проверьте, не завершилась ли какая-либо из операций привязки.

Если это не помогает, то, как правило, рекомендуется вести журнал диагностики. Вы можете использовать выделенную библиотеку журналов, например, log4net, или, по крайней мере, вы должны использовать простейшую форму регистрации через System.Diagnostics.Trace. Вы можете прослушивать сообщения трассировки, настроив прослушиватель трассировки в app.config или используя сторонние инструменты, такие как отладчик, или DebugView от Sysinternals.

Если вы действительно хотите подключить отладчик, вы можете программно вставить точку останова:

System.Diagnostics.Debugger.Break();

Я не проверял, как это работает с удаленным отладчиком, но в качестве крайнего средства вы можете держать ваше приложение в спящем режиме достаточно долго, чтобы позволить вам подключить отладчик:

System.Threading.Thread.Sleep(30000);
0 голосов
/ 10 ноября 2010

В конце концов, после долгих размышлений я понял, что причиной проблемы является WPF.Блог Рудсена раскрывает ответ .

В журнале приложения будет следующая ошибка:

.NET Runtime 4.0 Сообщения об ошибках

EventType clr20r3, P1eobfrontend.exe, P2 1.0.0.0, P3 4cd95cc7, P4 презентация, P5 4.0.0.0, P6 4ba1f8db, P7 78ff, P8 0, P9 system.windows.markup.xamlparse, P10 NIL.

Реализовано как Rudsen отметил, что "ошибка означает, что при синтаксическом анализе кода xaml произошла ошибка во время выполнения". Я следую инструкциям, описанным в разделе «Отладка Open> Исключения», и активирую флажок в столбце «Брошенный» для «Исключения среды выполнения общего языка».. После этого Visual Studio остановится на всех исключениях. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...