我想调试一个在启动时立即失败的.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呢?
谢谢!
巧妙的把戏!就我而言,击中F5会运行程序,然后立即退出。相反,使用Step Into会导致调试器在Main()的开始处出现中断。谢谢! – 2009-09-27 02:52:43