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

本文关键字:程调试 调试 Studio 启动 Visual 应用程序 | 更新日期: 2023-09-27 18:29:15

根据我现在的理解,使用远程调试器的唯一方法是启动目标应用程序,然后通过Visual Studio连接到它。有没有一种方法可以从程序一开始就捕获所有断点?

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

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

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

System.Diagnostics.Debugger.Launch();

当这一行被击中时,它将提示您附加调试器,实际上是在等待您的响应。由于您使用的是远程调试器,因此您应该能够在此时附加,然后取消对话框。希望这能有所帮助。

解决方案

System.Diagnostics.Debugger.Launch 

对我也不起作用。然而,我设法解决了我的问题,在我的应用程序中编写启动如下:

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

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

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

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

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

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

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

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

使用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远程调试器,然后在消息框中单击"确定"。

丑陋但实用。

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

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

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