C# 暴露一个难以捉摸的程序崩溃-崩溃转储问题 Windows 10和使用VisualStudio 2015,我尝试调试一个包含C++ PInvokes的WPF C应用程序。应用程序启动后,特定的执行路径会导致应用程序崩溃,然后显示以下消息:

C# 暴露一个难以捉摸的程序崩溃-崩溃转储问题 Windows 10和使用VisualStudio 2015,我尝试调试一个包含C++ PInvokes的WPF C应用程序。应用程序启动后,特定的执行路径会导致应用程序崩溃,然后显示以下消息:,c#,c++,wpf,pinvoke,crash-dumps,C#,C++,Wpf,Pinvoke,Crash Dumps,vshost32.exe已停止工作 一个问题导致程序停止正常工作。Windows将关闭该程序并通知您解决方案是否可用 我使用该对话框中提供的“调试”选项,然后它会说: 调试器已附加到MyWpfApp.exe,但未配置为调试此未处理的异常。若要调试此异常,请分离当前调试器 这令人沮丧。崩溃发生时,Visual Studio 2015正在对其进行调试。为什么“未配置为调试”此问题?是否可以修改配置以捕获此信息 在这一点上,我被卡住了。我尝试向VS 2015发出“detach all”命令,以便操作系

vshost32.exe已停止工作
一个问题导致程序停止正常工作。Windows将关闭该程序并通知您解决方案是否可用

我使用该对话框中提供的“调试”选项,然后它会说:

调试器已附加到MyWpfApp.exe,但未配置为调试此未处理的异常。若要调试此异常,请分离当前调试器

这令人沮丧。崩溃发生时,Visual Studio 2015正在对其进行调试。为什么“未配置为调试”此问题?是否可以修改配置以捕获此信息

在这一点上,我被卡住了。我尝试向VS 2015发出“detach all”命令,以便操作系统可以启动新的调试器,但VS 2015拒绝分离。如果我只是简单地停止VS2015,那么操作系统会说无法再调试崩溃,因为进程已经终止

简而言之,我无法调试这个问题——即使我有业界最好的工具直接针对它

关于如何调试这个神秘的崩溃有什么建议吗

我确实有关于这个问题的其他信息,因为我还尝试在Visual Studio 2013中的Windows 7计算机上调试它。它有同样的崩溃。在这种情况下,崩溃只会导致VS 2013中的调试会话在没有警告的情况下突然结束,就好像程序正常终止一样。为了捕捉坠机,我启动了

成功了!首先,我得到了以下信息:

MyWpfApp.exe中0x77BC46A9(msvcr120.dll)处未处理的异常:向认为无效参数致命的函数传递了无效参数

然后,堆栈跟踪向我显示了转换为非托管的托管代码的确切行,并最终到达崩溃的msvcr120

不幸的是,在这一初始成功之后,我的调试成功在此结束,因为Windows 7开发机器上的WER配置突然停止捕获任何进一步的崩溃。我原以为是我对WER进行了代码更改,但当我恢复更改时,WER仍然不知道应用程序正在崩溃

因此,最终,这场崩溃正在尽最大努力让自己不受惊吓——阻止我捕获一个崩溃转储。我还尝试从命令提示符下运行应用程序,并将其附加到:

令人惊讶的是,这也不起作用。操作系统捕获并报告了崩溃,而procdump完全不知道崩溃已经发生


我是否可以使用一个“更大的锤子”来确保捕获崩溃转储?

也许可以为有问题的进程启用应用程序验证程序并附加内核调试器?但是,我担心托管堆栈跟踪将是纯粹的垃圾。您可以使用WINDBG在非调试模式下运行应用程序吗?WINDBG可以查看所有内容,并且更容易操作非托管转储。WINDBG唯一的问题是它是一个巨大的学习曲线。但这是一切,包括在同一会话中使用SOS对托管代码进行调试的能力。是否可以为有问题的进程启用应用程序验证器并附加内核调试器?但是,我担心托管堆栈跟踪将是纯粹的垃圾。您可以使用WINDBG在非调试模式下运行应用程序吗?WINDBG可以查看所有内容,并且更容易操作非托管转储。WINDBG唯一的问题是它是一个巨大的学习曲线。但它是一切,包括在同一会话中使用SOS对托管代码进行调试的能力。
c:\>procdump -ma -e -accepteula -x . MyWpfApp.exe