Uco*_*dia 69 debugging process visual-studio
我有.NET程序,由于某些原因(从Excel 2010模板项目创建的Excel文件)无法从Visual Studio运行,我需要调试启动事件.
如果我想调试程序初始化后出现的事件,则没有问题.我从资源管理器运行该程序,将该过程附加到Visual Studio并在代码中添加一些断点.但在这里,我需要在启动事件上加上断点.我需要能够将进程附加到Visual Studio,不依赖于PID,而是依赖于特定的进程名称或任何其他可行的解决方案.
当然Thread.Sleep(1000)在我的启动事件中添加一个让我有时间在Visual Studio中附加进程是不可能的!
Tib*_*ibi 86
其实你可以; 你没有附上它,你就开始了.在项目的属性上,在"调试"选项卡上,在"命令"文本框中指定要附加到的程序的路径.
您还可以在"命令参数"框中输入程序的任何命令行参数:
确保"附加"设置为"否".
mst*_*nge 20
我在外部生成的进程中调试了一个C++插件,它在启动时抛出异常而崩溃,这对我很有用:
为Visual Studio添加免费的Reattach Extension.要求它在启动之前重新连接到进程名称.它会弹出一个模态对话框,说它正在等待进程名称启动.
现在启动该进程,Visual Studio调试器将立即附加,捕获异常并命中断点.
Mat*_*mas 16
如果您有Visual Studio 2017,请按照下列步骤操作:
比其他建议容易得多:您不必弄乱项目属性,也不需要扩展.
当我寻找类似的东西时,我找到了这个答案.在我的情况下,我不能简单地使用可执行文件作为我的项目的启动程序,因为它需要在一个我无法轻易复制的非常特定的环境中启动(namly:从cygwin开始).
我看了一下mrstrange建议的Reattach扩展,以及非常类似的Attach To Anything扩展...但是我的可执行文件似乎关闭得太快,无法通知和附加扩展.
最后帮助我的是:https://stackoverflow.com/a/4042545/1560865,它引用了MSDN文章如何:自动启动调试器,然后列出以下步骤:
debugger. vsjitdebugger.exe. 希望这对未来的其他人有所帮助!
小智 6
您可以显示一个消息框,这会阻止应用程序,然后将调试器附加或重新附加到进程,然后单击“确定”继续:
MessageBox.Show("Attach process to debugger and click ok!");
Run Code Online (Sandbox Code Playgroud)
您可以将其添加到 Form 构造函数中(如果您使用 winforms),因此这将在其他任何事情之前执行,除了组件的初始化之外:
public MainForm()
{
InitializeComponent();
MessageBox.Show("Attach process to debugger and click ok!");
}
Run Code Online (Sandbox Code Playgroud)
完成调试后,注释掉该行。
您可以通过以下方式从您的代码启动调试器
public static void Main(string[] args)
{
System.Diagnostics.Debugger.Launch();
}
Run Code Online (Sandbox Code Playgroud)
但是不要在发送应用程序之前删除此行。也许您想使用编译器标志来确定:
public static void Main(string[] args)
{
#if debug
System.Diagnostics.Debugger.Launch();
#endif
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37715 次 |
| 最近记录: |