【问题标题】:Debugging unmanaged code while debugging managed code在调试托管代码时调试非托管代码
【发布时间】:2011-01-31 22:53:03
【问题描述】:

我正在开发的 .NET 3.5 应用程序包含许多不同的解决方案。其中一些解决方案包含托管代码 (C#),而其他解决方案包含非托管代码 (C++)。用 C# 编写的方法与用 C++ 编写的方法进行通信。我正在尝试跟踪这些不同函数之间的依赖关系,并且我想在包含我的 C++ 函数的解决方案上设置断点。 C# 解决方案之一有启动项目。我在调试模式下运行这个解决方案,期望我的非托管代码中的断点会被命中,但实际上什么也没发生。有人可以指导我完成使用 Visual Studio IDE 调试诸如此类的混合应用程序的过程吗?

谢谢

【问题讨论】:

    标签: c# c++ visual-studio visual-studio-2008 debugging


    【解决方案1】:

    在 Visual Studio 2019 中,启用该选项的方式如下:

    • 右键单击项目并选择属性
    • 进入配置下的调试子菜单
    • 从调试器类型下拉值中选择混合

    【讨论】:

      【解决方案2】:
      1. 转到托管项目属性。
      2. 右键单击它并转到调试选项卡。
      3. 在该部分下有一个名为启用调试器的部分。
      4. 选中“启用本机代码调试”选项

      然后您将能够调试本机代码。祝你好运!!!

      请参考下面用红色矩形突出显示的图片。

      【讨论】:

        【解决方案3】:

        默认情况下,托管项目只会在启用托管调试的情况下启动调试器。它不认为同一解决方案中有非托管项目。为了调试两者,您需要显式启用非托管代码调试。

        • 右键单击项目并选择属性
        • 转到“调试”选项卡
        • 勾选“启用非托管代码调试”

        【讨论】:

        • 谢谢贾里德。如果我的非托管代码在一个解决方案中,而我的托管代码在另一个 Visual Studio 解决方案中,我是否需要从我的两个解决方案中运行调试器才能到达断点。我按照你的建议做了,但我仍然无法达到断点。
        • 您正在编译 C++ 类的调试版本?
        • @sc_ray:如果您要附加到进程:在Attach to Process 框中,单击select 并选中“托管”和“本机”框。
        • 次要添加...似乎在 VS2013 中的文本现在显示“启用本机代码调试”
        • @RaphaëlSaint-Pierre 感谢您的提醒。那是缺失的部分。我们有一个 .NET 4.0 项目,因此我们选择了“Managed (v4.0)”和“Native”,它运行良好。
        猜你喜欢
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        相关资源
        最近更新 更多