在VS 2005中使用托管/非托管代码调试dll失败。为什么?

时间:2008-12-02 14:21:55

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

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

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

问题在于:

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

  2. 如果我将其设置为“混合”,则会触发断点,但非托管监视为空。例如,我看不到std :: string的值。然而,我可以看到像int和bool这样的基本类型。

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

通常,混合模式调试似乎在VS2008中运行得更好。如果可以,我建议升级。有一个免费版本,但我认为它在某种程度上有限。

答案 2 :(得分:0)

您确定已启用所有调试选项吗?当我试图浏览C ++选项的迷宫时,我已经看到这种情况发生了'遗忘'。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

LanceSc的建议确实有帮助 转到工具|选项,选择Debugging |通用。
取消选中“启用我的代码(仅管理)”旁边的框 这解决了VS2008中的问题。