已附加调试器但未配置为调试此未处理的异常

时间:2017-09-15 22:09:05

标签: c# .net debugging service c++-cli

是的,我知道,我知道,有很多类似的问题,但那里的答案并不适合我。我的设置可能会有点复杂。该解决方案有两个项目(均使用.NET 4.5.2):

  • 托管C#64位(或可能是32位)应用程序,
  • C ++ / CLI Windows服务,由于使用了SDK,因此严格为32位。

该服务在运行时有一个未处理的访问冲突崩溃,而不是在我的代码中,而是在深入SDK的某个地方回调我的代码。事件查看器告诉我它在ntdll.dll,但仅此而已。

有多种方法可以调试,但我发现最方便的是将服务作为一个独立的控制台应用程序启动,并在System::Diagnostics::Debugger::Launch()中调用Main()。这允许我将它附加到VS调试器。 正好可以运行。

我现在启动主应用程序并转到崩溃发生的部分。无论我是在第二个VS调试器下启动它还是直接从UI运行(Windows提供在第二种情况下选择调试器),下一个对话框将是通常的错误消息(参见标题)。但是:

  • 项目设置为调试混合代码(服务),本机包含(主应用程序),
  • 主应用已设置允许不安全的代码(由于无关的原因,但有些答案表明这也有助于混合代码调试),
  • 调试器设置为处理所有 Win32和C ++异常。

因此导致导致此错误的常见问题得以解决。还有什么可能导致我无法调试此服务?

1 个答案:

答案 0 :(得分:0)

我想我已经钉了它。 System::Diagnostics::Debugger::Launch()不能在这种情况下使用。唯一的方法是使用 Debug>附加到进程并仔细设置所有代码类型。我知道我早些尝试过,但其他一些设置可能还没有到位。所以,除了上面的所有之外,只使用这种附加调试器的形式,没有别的。