我想调试一个在启动时立即失败的.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那样将调试器附加到新创建的进程?
谢谢!
发布于 2009-09-26 22:24:15
调试器在附加之前需要进行一定数量的处理。例如,在ASP.Net中,很难在IIS上调试"Application_Start“事件,因为它太早了-应用程序必须在附加调试器之前启动。
但是,您可以在Windbg中执行您的程序,并立即获得中断或内存转储。有一个great tutorial on setting up windbg here,在这篇文章的一些评论中,有关于如何在windbg中运行.exe并立即获得转储的说明。
发布于 2009-09-26 22:52:01
我认为你可以只做“文件\打开\项目/解决方案”,选择.exe作为“解决方案”,然后点击F5。
https://stackoverflow.com/questions/1482306
复制相似问题