Подтвердить что ты не робот

Как подключить отладчик при создании процесса?

Я хотел бы отлаживать приложение .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?

Спасибо!

4b9b3361

Ответ 1

  • Создайте новый проект (проект консоли в порядке).
  • Щелкните правой кнопкой мыши проект и выберите "Свойства".
  • Перейдите на вкладку "Отладка".
  • Выберите "Запустить внешнюю программу:"
  • Выберите программу.
  • Хит F5.

Ответ 2

Отладчик требует определенного объема обработки, прежде чем его можно будет подключить. Например, в ASP.Net трудно отлаживать события "Application_Start" в IIS, потому что это слишком рано - приложение нужно запустить, прежде чем можно будет подключить отладчик.

Вы можете выполнить свою программу в Windbg и получить немедленный разрыв или дамп памяти. Там отличный учебник по настройке windbg здесь, а в некоторых комментариях к сообщению есть инструкции о том, как запустить ваш .exe из в windbg и получить немедленную дамп.

Ответ 3

  • Вы можете использовать windbg, чтобы начать процесс.
  • Вы можете использовать reflector для декомпиляции и получения источника и продолжения оттуда.

Другая идея - использовать монитор процесса, чтобы узнать, что пытается сделать этот процесс. Ошибка, скорее всего, вызвана зависимостью от какой-то внешней вещи. И монитор процесса может помочь вам найти его.

Обновление: Вы можете использовать рефлектор FileDisassembler для создания полного решения и отладки его из есть.

Ответ 4

Я думаю, что вы можете просто сделать "Файл\Открыть\Проект/Решение", выбрать "EXE" как "решение", а затем нажать F5.