我想调试一段用C ++编写的代码。问题是dll是混合的 - 它包含C ++和CLI(托管C ++)。环境是VS 2005。
我的入口点是一个非常简单的可执行项目,用C ++编写,只是启动混合dll中的代码。
问题在于:
如果我将两个项目的“调试类型”设置为“自动”,则不会触发我的断点。 (后来编辑:这是正常的,因为Auto是基于可执行项目的内容)。
如果我将其设置为“混合”,则会触发断点,但非托管监视为空。例如,我看不到std :: string的值。然而,我可以看到像int和bool这样的基本类型。
答案 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中的问题。