【问题标题】:Debugging in a dll with both managed / unmanaged code fails in VS 2005. Why?在 VS 2005 中使用托管/非托管代码在 dll 中调试失败。为什么?
【发布时间】:2008-12-02 14:21:55
【问题描述】:

我想调试一段用 C++ 编写的代码。问题是 dll 是混合的 - 它同时包含 C++ 和 CLI(托管 C++)。环境是VS 2005。

我的入口点是一个非常简单的可执行项目,用 C++ 编写,它只是启动混合 dll 中的代码。

问题是:

  1. 如果我将两个项目的“调试类型”设为自动,我的断点不会被命中。 (稍后编辑:这是正常的,因为 Auto 是基于可执行项目的内容)。

  2. 如果我将它设置为“混合”,断点会被命中,但非托管监视是空的。例如,我看不到 std::string 的值。但是,我可以看到基本类型,例如 int 和 bool。

【问题讨论】:

    标签: debugging visual-studio-2005 c++-cli


    【解决方案1】:

    另外,尝试将您的调试器设置为混合。这将允许调试托管和非托管代码。

    【讨论】:

      【解决方案2】:

      我可以在 VS2005 中通过在项目属性(在调试选项卡上)中将调试器类型设置为混合来在混合模式下进行调试。有时这些事情会在重新启动和干净重建后消失。

      如果这不起作用,请在应用程序开始运行后尝试附加到应用程序(调试 | 附加到进程)。您可以通过按“附加到:”部分旁边中间的“选择”按钮来选择调试模式。

      您是否拥有来自 Microsoft 的所有更新?可能有一个可以解决您的问题。

      一般来说,混合模式调试似乎在 VS2008 中工作得更好。如果可以的话,我建议升级。有一个免费版本,但我认为它在某些方面受到限制。

      【讨论】:

        【解决方案3】:

        您确定启用了所有调试选项?我已经看到在尝试浏览 C++ 选项的迷宫时“忘记”某些内容时会发生这种情况。

        【讨论】:

        • 我不记得了,有这么多,把所有人的最高级别。编译器和链接器。
        【解决方案4】:

        我面前没有我的 2005/2008 环境,但是我似乎记得有一个选项需要在项目设置中启用(我相信调试选项卡)才能进行非托管调试。启用此功能后,您应该不会有任何问题。

        【讨论】:

          【解决方案5】:

          您需要告诉 Visual Studio 调试的不仅仅是托管代码。转到工具 |选项,选择调试 |一般的。取消选中“仅启用我的代码(仅限托管)”旁边的框。

          【讨论】:

            【解决方案6】:

            LanceSc 的建议真的很有帮助。
            转到工具 |选项,选择调试|一般。
            取消选中“仅启用我的代码(仅限托管)”旁边的框
            这样就解决了VS2008中的问题。

            【讨论】:

              猜你喜欢
              • 2011-01-31
              • 1970-01-01
              • 2017-10-16
              • 1970-01-01
              • 1970-01-01
              • 2013-08-24
              • 2011-09-04
              • 2011-01-29
              • 1970-01-01
              相关资源
              最近更新 更多