代码之家  ›  专栏  ›  技术社区  ›  Allon Guralnek

如何在进程创建时附加调试器?

  •  17
  • Allon Guralnek  · 技术社区  · 16 年前

    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那样将调试器附加到新创建的进程?

    谢谢

    4 回复  |  直到 16 年前
        1
  •  21
  •   John Fisher    16 年前
    1. 创建一个新项目(控制台项目就可以了)。
    2. 右键单击项目并选择“属性”。
    3. 选择“启动外部程序:”
    4. 选择程序。
    5. 按F5。
        2
  •  3
  •   womp    16 年前

    在附加调试器之前,调试器需要进行一定量的处理。例如,在ASP.Net中,很难调试IIS上的“应用程序启动”事件,因为这太早了-必须先启动应用程序,然后才能附加调试器。

    您可以在Windbg中执行程序,并立即中断或转储内存。有一个 great tutorial on setting up windbg here ,在文章的一些评论中,有关于如何从windbg中运行.exe并立即转储的说明。

        3
  •  1
  •   Igal Serban    16 年前
    1. 你可以用 windbg 你可以从它开始这个过程。
    2. 你可以用 reflector

    另一个想法是使用 process monitor 查看流程正在尝试执行的操作。失败很可能是由于对某些外部事物的依赖造成的。进程监视器可以帮助您找到它。

    更新: FileDisassembler

        4
  •  0
  •   Brian    16 年前

    我想你可以只做“File\Open\Project/Solution”,选择.exe作为“Solution”,然后点击F5。

    推荐文章