揭露难以捉摸的程序崩溃 - 崩溃转储问题

时间:2016-02-14 01:49:29

标签: c# c++ wpf pinvoke crash-dumps

在Windows 10上并使用Visual Studio 2015,我尝试调试包含C ++ PInvokes的WPF C#应用程序。应用程序启动后,特定的执行路径会导致应用程序崩溃,然后会显示以下消息:

  

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

我采用" Debug"该对话提供了选项,然后说:

  

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

这令人沮丧。发生崩溃时,Visual Studio 2015正在调试它。为什么它没有配置为调试"这个问题?可以修改配置以捕获它吗?

此时我被困住了。我尝试发布一个"分离所有"命令VS 2015,以便操作系统可以启动一个新的调试器,但VS 2015拒绝分离。如果我只是停止 VS2015,那么操作系统会说无法再调试崩溃,因为该过程已经终止。

简而言之,我无法调试问题 - 即使我有直接指向它的最佳行业工具。

有关如何调试此神秘崩溃的任何建议吗?

我确实有关于此问题的其他信息,因为我还尝试在Visual Studio 2013中的Windows 7计算机上对其进行调试。它具有相同的崩溃。在这种情况下,崩溃只会导致VS 2013中的调试会话突然结束而不会发出警告 - 就好像程序已正常终止一样。为了捕获崩溃,我激活了crash dump capture via Windows Error Reporting (WER)

有效!首先,我得到了这个信息:

  

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

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

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

所以最后,这次崩溃正在尽力让人无法解决 - 阻止我捕获崩溃转储。我还尝试从命令提示符运行应用程序,并将sysinternals procdump附加到它:

c:\>procdump -ma -e -accepteula -x . MyWpfApp.exe

令人惊讶的是,这也没有奏效。操作系统发现了崩溃并报告了它,而procdump完全没有意识到发生了崩溃。

是否有更大的锤子"我可以使用它来确保我可以捕获崩溃转储吗?

0 个答案:

没有答案