应用程序启动时的 Visual Studio 远程调试

Posted

技术标签:

【中文标题】应用程序启动时的 Visual Studio 远程调试【英文标题】:Visual Studio remote debugging on application startup 【发布时间】:2012-04-11 09:59:39 【问题描述】:

据我所知,使用远程调试器的唯一方法是启动目标应用程序,然后通过 Visual Studio 附加到它。有没有办法从程序一开始就捕获所有断点?

我的程序中有需要调试的代码,但我永远无法以足够快的速度连接调试器来捕获该执行代码。

【问题讨论】:

@HaraldDutch 在这里描述了一个很好的解决方案:***.com/questions/19512041/… 相关:How do I attach Visual Studio to a process that is not started yet? 【参考方案1】:

在目标机器上设置与本地机器上 Visual Studio 年份相匹配的 Visual Studio 远程调试器。

注意提供服务器名称的行。

在 Visual Studio 的本地计算机上,打开启动项目的属性,然后打开调试部分。

选中“使用远程计算机”复选框,然后在文本字段中输入您从 Visual Studio 远程调试器获得的服务器名称。

在“启动操作”下,选择“启动外部程序”。然后将您希望在目标计算机上启动的 .exe 的路径放入字段中。

现在,当您在本地计算机上按下启动按钮时,它将在目标计算机上启动程序,并附加调试器。

【讨论】:

这是为我做的。如此简单,我只是假设它只能在本地工作。【参考方案2】:

对我来说正确的解决方案是答案的组合。

while 循环将检查调试器是否从 Visual Studio 附加并在附加时退出循环。

        System.Diagnostics.Debugger.Launch();
        while (!System.Diagnostics.Debugger.IsAttached)
        
            System.Threading.Thread.Sleep(100);
        

【讨论】:

其实就是“System.Diagnostics.Debugger.Launch();”这一行不需要。【参考方案3】:

如果您可以更改代码,请尝试在您的应用程序的起点注入这行代码:

System.Diagnostics.Debugger.Launch();

点击此行时,它会提示您附加调试器,有效地等待您响应。由于您使用的是远程调试器,因此您应该能够在该点附加,然后取消对话框。希望这会有所帮助。

【讨论】:

不应该是System.Diagnostics.Debugger.Launch();吗?这是一个没有参数的方法调用,它需要像任何语句一样在末尾使用分号。 没用。应用会正常启动,无法调试应用启动。【参考方案4】:

解决办法

System.Diagnostics.Debugger.Launch 

对我也不起作用。但是,我设法解决了我在应用程序中编写以下内容的问题:

while (!System.Diagnostics.Debugger.IsAttached)
    System.Threading.Thread.Sleep(100);

这样,应用程序将一直等待,直到附加调试器。

【讨论】:

这实际上是一个不错的解决方案。包含在#ifdef DEBUGendif 中,当我在我的机器上调试时,它不会干扰发布版本并且可以完美地工作。但是当我需要远程调试时,它只是等待。谢谢!【参考方案5】:

使用 Visual Studio Pro 2010 构建 .NET 4 应用程序,这对我不起作用。

显然这是一个已知的错误:

https://connect.microsoft.com/VisualStudio/feedback/details/611486/debugger-launch-is-now-crashing-my-net-application-after-upgrading-to-net-4-0

目前对我有用的一个(有点老套的)解决方法就是让应用程序在主窗口初始化开始时抛出一个 MessageBox():

public partial class MainWindow : Form

    public MainWindow()
    
        // To allow you time to attach a remote debugger ...
        MessageBox.Show("Please attach debugger");

        InitializeComponent();
        ...

现在您可以随意附加 VS 远程调试器,然后在消息框上点击 OK。

丑陋但实用。

【讨论】:

以上是关于应用程序启动时的 Visual Studio 远程调试的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 远程调试

Visual Studio 远程调试

Visual Studio 远程调试

远程部署/调试 Visual Studio 2017 .NET Core

X11 转发 ssh Visual Studio 远程连接

Visual Studio 2012 分析远程调试过程