2016-04-23 65 views
0

我有一个WinForms托管应用程序调用本机C++ dll。我已经为该项目启用了混合托管和非托管调试,并且在调试项目时能够进入非托管代码。 我对JIT调试很感兴趣,因为在调试器外面运行调试版本要快得多,并且只有在违反某些断言后才开始调试。当托管代码中引发异常时,JIT调试器正常工作。当我JIT调试一个独立的C++应用程序时,它也可以工作。但是,无论何时在从WinForms应用程序调用的非托管代码内引发异常,JIT调试程序在启动调试会话后立即退出。我已经在选项/调试/实时列表中启用了所有的JIT调试器。这种情况是否支持?Visual Studio即时调试器立即退出

UPDATE

我已经运行一些测试,我可以看到

  1. 这个问题是不特定的WinForms应用程序。当托管控制台应用程序调用本机dll时JIT调试失败,这引发了断言异常。
  2. 该问题似乎不依赖于框架版本。我试过版本3.5,4,4.5,4.6。
  3. 当我将调试器附加到托管主机应用程序时,调试器也无法在非托管代码中断言断言异常。

回答

0

我觉得很蠢。解决方案就在我面前。 在Visual Studio Just-In-Time Debugger对话框中有一个选项。它被称为“手动选择调试引擎”。必须选择托管引擎和本机引擎。

0

我以前经历过这种情况。我认为问题在于调试器未捕捉到异常。

我做了以下,也许这会有所帮助。

点击Debug-> Windows-> Exception Settings。

或者您只需在快速启动时搜索“异常”。

您可能会发现很多异常在默认设置下都没有捕获到。

+0

谢谢你,但是这似乎并不在这里如此。断言异常已启用,并且在运行独立本机应用程序时正确捕获。只有在从托管代码调用的本地dll内引发断言异常时,它才会进行jit-debug。但以防万一我已启用所有例外。同样的问题。 – Max