应用程序启动时的Visual Studio远程调试
本文关键字:程调试 调试 Studio 启动 Visual 应用程序 | 更新日期: 2023-09-27 18:29:15
根据我现在的理解,使用远程调试器的唯一方法是启动目标应用程序,然后通过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);
}