【问题标题】:Enabling "Native Code Debugging" in C++/CLI/C# project crashes application在 C++/CLI/C# 项目中启用“本机代码调试”会使应用程序崩溃
【发布时间】:2019-07-30 09:17:34
【问题描述】:

我在 Visual Studio 2019 中有一个项目,我在其中创建一个 C# 接口到 C 库。 当我使用默认调试设置运行时,一切正常,但是当我将 STL 变量(std::vector、std::string 等)添加到监视列表时,我在监视列表中收到一条错误消息,说我需要启用混合模式。 在谷歌搜索后,我找到了执行此操作的过程,但这次它使程序崩溃,并显示“未加载 WNTDLL.pdb”。保持混合模式处于活动状态但禁用“启用本机代码调试”可以解决问题,但我仍然看不到 STL 容器。

我是否需要在设置中更改任何其他内容以避免此崩溃?我做错了什么?

我尝试了其他一些设置,例如“只是我的代码”,但这并没有什么不同。 安装 Visual Studio 2019 时出现一个问题,我无法在 C++ 中运行“Hello World”默认项目。我通过首先在 Python 中创建相同的 hello world 来解决这个问题,它以某种方式修复了 C++ 调试器。这可能是一个损坏的调试器吗?

显然,我希望程序不会崩溃,而是允许我在 vaiables 和 stl 容器中达到峰值,就像在普通 C++ 应用程序中一样。

【问题讨论】:

    标签: c# c++ command-line-interface


    【解决方案1】:

    您应该首先将您的设置恢复到您收到错误的状态:

    WNTDLL.pdb 未加载

    现在,这是什么意思?这意味着您要么没有调试信息 - 特别是要调试的 dll 的 program database 文件 (.pdb),要么它已损坏。

    因此,您需要确保正确加载符号。对于 WNTDLL,您需要确保 Microsoft 符号服务器可供您使用,并且您已在符号路径设置中启用它 (Debug > Options > Symbols)。有关更多信息,您还可以查看此question。

    编辑:详细说明您问题中的其余部分:

    设置Enable native code debugging 完全按照它的说法。在您的情况下,您希望启用它,否则您将无法调试您的本机库(请参阅here)。禁用选项的混合模式基本上只是托管代码。

    设置Just my code 再次按照它说的那样做。它automatically steps over calls to non-user code。在您的情况下,您希望禁用它,因为 WNTDLL 不是您的代码。调试时可以在modules window看到不同模块的识别情况。

    我不能说你在“Hello World”中遇到的问题,但我可以说 .pdb 问题肯定是我上面解释的问题。

    【讨论】:

    • 做了一些事情。现在我仍然得到一个抛出的异常,但它是 NTDLL.dll 访问冲突写入位置 0x0000000
    • @TomRoyl​​e 太好了,现在您可以调试了。我对NTDLL了解不多,虽然我发现有一个common error。建议杀毒软件干扰C++调试会话。因此,解决方法是停用它。
    • 我害怕你这么说。我根本无法禁用我的防病毒软件。我将尝试与我的 IT 支持一起开票
    • @TomRoyl​​e 在我评论的链接中还有其他一些解决方案,因此您可以尝试这些解决方案,自行研究或针对您新发现的异常提出其他问题。由于这个问题已经完成了很多,而我在 C++ 调试领域并没有太多的专业知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多