【问题标题】:A debugger is attached but not configured to debug this unhandled exception已附加调试器,但未配置为调试此未处理的异常
【发布时间】:2017-09-16 20:36:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 一个 C++/CLI 项目需要传统的托管调试引擎,从问题中不清楚你是否处理了这个问题。新的调试引擎有几种奇怪的行为方式。工具 > 选项 > 调试 > 常规 > 勾选“使用托管兼容模式”复选框。顺便说一句,当您将其永久保留时,生活会大大简化,新引擎是一个讨厌的包'o bug。
  • 托管和本机兼容模式均已检查。
  • 缺少太多细节。 “Windows 提供调试”,这是否意味着您在没有调试器的情况下启动了主应用程序?好吧,不要那样做,有太多方法会出错,比如选择正在运行的 VS 实例或选择错误的调试引擎。只需启动 VS 两次。
  • 不幸的是,两个 VS 运行或仅一个(主应用程序处于调试模式但不在调试器下运行)都没有区别。 “Win 提供调试”仅指通常的对话框“Windows 寻找解决方案”和底部的 Debug 按钮。
  • 汉斯,我稍微编辑了问题以包含这些细节。无论我如何启动这些部分,问题是在实际调试访问冲突时,(否则看似正确设置调试器,附加并运行)拒绝调试,说明它无法处理此异常。这一定是这里的一些特定问题,而不是一般问题,因为我确实成功调试了同一应用程序的其他部分中的类似问题。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2013-06-01
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多