我正在尝试远程调试C#程序。连接到主机不是问题,我可以看到该计算机上正在运行的所有进程,并且可以连接到 msvsmon.exe 。
但是,我想调试的程序在启动时立即崩溃,让我没有时间依赖它。通过远程位置启动有问题的调试可执行文件也不会产生任何问题。如何在崩溃前附加调试器?
答案 0 :(得分:13)
我最喜欢在程序启动时附加调试器的技巧之一是使用Image File Execution Options
。它是一个注册表工具,允许您在执行之前将调试器附加到应用程序。例如,使用Process Explorer替换Windows任务管理器,或Notepad2替换Notepad.exe
。
您可以阅读所有相关内容here。
以下是您设置的方式:
regedit.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
Debugger
,值为vsjitdebugger.exe
运行可执行文件时,您将看到Just In Time提示,要求您选择调试器:
当此对话框打开时,远程连接到您的流程,然后按对话框上的No
。
希望有所帮助。
答案 1 :(得分:10)
启动时崩溃可能是由于缺少依赖性。在启动应用程序之前运行fuslogvw.exe
,看看是否有任何绑定操作失败。
如果这没有帮助,通常将诊断日志记录到位是一种好习惯。您可以使用专用的日志记录库,例如log4net,或者至少你应该通过System.Diagnostics.Trace
使用最简单的日志记录形式。您可以通过在app.config中配置跟踪侦听器或使用第三方工具(如调试器)或来自Sysinternals的 DebugView 来侦听跟踪消息。
如果您确实想要附加调试器,可以通过编程方式插入断点:
System.Diagnostics.Debugger.Break();
我还没有检查它如何与远程调试器一起工作,但作为最后的手段,您可以让您的应用程序长时间睡眠以允许您附加调试器:
System.Threading.Thread.Sleep(30000);
答案 2 :(得分:0)
最终经过多次挖掘后,我意识到WPF是导致问题的原因。 Rudsen的博客揭示了answer.
在应用程序日志中会出现以下错误;
.NET Runtime 4.0错误报告
EventType clr20r3,P1 eobfrontend.exe,P2 1.0.0.0,P3 4cd95cc7,P4 presentationframework,P5 4.0.0.0,P6 4ba1f8db,P7 78ff,P8 0,P9 system.windows.markup.xamlparse,P10 NIL。
实现Rudsen评论“错误意味着解析xaml代码时出现运行时错误”。我按照“Open Debug> Exceptions”中列出的步骤激活“thrown”中的复选框“公共语言运行时异常”列。完成后,Visual Studio将暂停所有异常。“