Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试启动时崩溃的C可执行文件_C#_Visual Studio_Visual Studio 2010_Debugging - Fatal编程技术网

C# 调试启动时崩溃的C可执行文件

C# 调试启动时崩溃的C可执行文件,c#,visual-studio,visual-studio-2010,debugging,C#,Visual Studio,Visual Studio 2010,Debugging,我正在尝试远程调试一个C程序。连接到主机没有问题,我可以看到该计算机上运行的所有进程,并且可以连接到msvsmon.exe 然而,我想要调试的程序在启动时立即崩溃,使我没有时间连接到它。另外,通过远程位置启动相关的调试可执行文件也不会产生任何效果。如何在崩溃之前附加调试器?启动时崩溃可能是由于缺少依赖项。在启动应用程序之前运行fuslogvw.exe,查看是否有任何绑定操作失败 如果这样做没有帮助,通常最好将诊断日志记录到位。您可以使用专用的日志库,例如log4net,或者至少应该通过Syste

我正在尝试远程调试一个C程序。连接到主机没有问题,我可以看到该计算机上运行的所有进程,并且可以连接到msvsmon.exe


然而,我想要调试的程序在启动时立即崩溃,使我没有时间连接到它。另外,通过远程位置启动相关的调试可执行文件也不会产生任何效果。如何在崩溃之前附加调试器?

启动时崩溃可能是由于缺少依赖项。在启动应用程序之前运行fuslogvw.exe,查看是否有任何绑定操作失败

如果这样做没有帮助,通常最好将诊断日志记录到位。您可以使用专用的日志库,例如log4net,或者至少应该通过System.Diagnostics.Trace使用最简单的日志形式。您可以通过在app.config中配置跟踪侦听器或使用第三方工具(如来自Sysinternals的调试器或DebugView)来侦听跟踪消息

如果确实要附加调试器,可以通过编程方式插入断点:

System.Diagnostics.Debugger.Break();
我没有检查远程调试器是如何工作的,但作为最后的手段,您可以让应用程序睡眠足够长的时间,以便附加调试器:

System.Threading.Thread.Sleep(30000);

经过反复的挖掘,我终于意识到WPF是问题的根源。鲁德森的博客揭示了

在应用程序日志中会出现以下错误:

.NET运行时4.0错误报告

事件类型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代码时出现运行时错误。我遵循OpenDebug>Exceptions概述的步骤,并激活公共语言运行时异常的抛出列中的复选框。这样,Visual Studio将在所有异常情况下停止。

我最喜欢的在程序启动时附加调试器的技巧之一是使用图像文件执行选项。它是一个注册表工具,允许您在应用程序执行之前将调试器附加到应用程序。例如,使用相同的技巧可以将Windows任务管理器替换为,或将Notepad.exe替换为

你可以阅读所有关于它的内容

下面是您如何设置它的:

运行regedit.exe 去 HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image文件执行选项 创建名为exe的新密钥示例:yourprogram.exe 在exe下创建新的字符串值。字符串值的名称为Debugger,值为vsjitdebugger.exe 运行可执行文件时,您将看到即时提示,要求您选择调试器:

System.Threading.Thread.Sleep(30000);
打开此对话框时,远程连接到进程,然后按对话框上的“否”


希望能有所帮助。

Crickey,这很有帮助。没有意识到这是可以做到的。GFlags是Microsoft提供的免费工具,它将在注册表中为您设置此选项,以及许多其他有用的调试选项。它是免费提供的,当您需要将调试器设置为每次程序或服务在系统上运行时都运行时,它非常值得使用。