Ответ 1
- Создайте новый проект (проект консоли в порядке).
- Щелкните правой кнопкой мыши проект и выберите "Свойства".
- Перейдите на вкладку "Отладка".
- Выберите "Запустить внешнюю программу:"
- Выберите программу.
- Хит F5.
Я хотел бы отлаживать приложение .NET, которое сразу же запускается при запуске (и существует без сообщения об ошибке или журнала), но я не могу подключить к нему отладчик, потому что процесс существует почти сразу после его запуска. У меня нет исходного кода для приложения, поэтому я не могу выполнить "Начать отладку". Я попытался использовать макрос Visual Studio, чтобы начать процесс, прикрепить к нему, а затем сломать, но макрос слишком медленный, и к тому моменту, когда он найдет этот процесс, процесс уже вышел:
Imports System
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Public Module Module1
Sub RunAndAttach()
Try
Dim dbg As Debugger3 = DTE.Debugger
Dim trans As Transport = dbg.Transports.Item("Default")
Dim sysProc As Process = System.Diagnostics.Process.Start(New ProcessStartInfo("C:\Temp\CrashingApp.exe") With {.WorkingDirectory = "C:\Temp"})
Dim proc As EnvDTE90.Process3 = dbg.GetProcesses(trans, "ALLON-PC").Item("CrashingApp.exe")
If (Not sysProc.HasExited) Then
proc.Attach()
proc.Break(False)
Else
MsgBox("Process " + proc.Name + " has already has exited.")
End If
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
End Sub
End Module
Есть ли способ подключить отладчик к вновь созданному процессу, например, F5?
Спасибо!
Отладчик требует определенного объема обработки, прежде чем его можно будет подключить. Например, в ASP.Net трудно отлаживать события "Application_Start" в IIS, потому что это слишком рано - приложение нужно запустить, прежде чем можно будет подключить отладчик.
Вы можете выполнить свою программу в Windbg и получить немедленный разрыв или дамп памяти. Там отличный учебник по настройке windbg здесь, а в некоторых комментариях к сообщению есть инструкции о том, как запустить ваш .exe из в windbg и получить немедленную дамп.
Другая идея - использовать монитор процесса, чтобы узнать, что пытается сделать этот процесс. Ошибка, скорее всего, вызвана зависимостью от какой-то внешней вещи. И монитор процесса может помочь вам найти его.
Обновление: Вы можете использовать рефлектор FileDisassembler для создания полного решения и отладки его из есть.
Я думаю, что вы можете просто сделать "Файл\Открыть\Проект/Решение", выбрать "EXE" как "решение", а затем нажать F5.