Debugging 在VS 2005中,使用托管/非托管代码在dll中调试失败。为什么? 我想调试一段用C++编写的代码。问题是DLL是混合的——它包含C++和CLI(托管C++)。环境与2005年相比有所改善 我的入口点是一个非常简单的可执行项目,用C++编写,它只在混合DLL中启动代码。p>

Debugging 在VS 2005中,使用托管/非托管代码在dll中调试失败。为什么? 我想调试一段用C++编写的代码。问题是DLL是混合的——它包含C++和CLI(托管C++)。环境与2005年相比有所改善 我的入口点是一个非常简单的可执行项目,用C++编写,它只在混合DLL中启动代码。p>,debugging,visual-studio-2005,c++-cli,Debugging,Visual Studio 2005,C++ Cli,问题在于: 如果两个项目都将“调试类型”设置为自动,则不会命中断点。(稍后编辑:这是正常的,因为Auto基于可执行项目的内容) 如果将其设置为“mixed”,则会命中断点,但非托管手表为空。例如,我看不到std::string的值。但是,我可以看到基本类型,如int和bool 确实启用了所有调试选项吗?当我试图在迷宫中选择C++选项时,我看到了这种情况。 你确定你启用了所有的调试选项吗?当我试图在迷宫中选择C++选项时,我看到了这种情况。 < P>我前面没有2005/2008个环境,但是我似乎记

问题在于:

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

  • 如果将其设置为“mixed”,则会命中断点,但非托管手表为空。例如,我看不到std::string的值。但是,我可以看到基本类型,如int和bool


  • 确实启用了所有调试选项吗?当我试图在迷宫中选择C++选项时,我看到了这种情况。

    你确定你启用了所有的调试选项吗?当我试图在迷宫中选择C++选项时,我看到了这种情况。

    < P>我前面没有2005/2008个环境,但是我似乎记得在项目设置中需要启用一个选项(我相信调试选项卡),以便进行非托管调试。一旦启用,您就不会有任何问题。

    我面前没有我的2005/2008环境,但是我似乎记得,为了进行非托管调试,需要在项目设置(我相信是“调试”选项卡)中启用一个选项。一旦启用,您就不会有任何问题。

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

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

    此外,请尝试将调试器设置为“混合”。这将允许调试托管和非托管代码。

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

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

    如果这不起作用,请在应用程序开始运行后尝试附加到应用程序(调试|附加到进程)。你可以通过按下“附加到”部分中间的“选择”按钮来选择调试模式。 你有来自微软的所有更新吗?也许有一个可以解决你的问题


    一般来说,混合模式调试在VS2008中似乎工作得更好。如果可以,我建议升级。有一个可用的免费版本,但我认为它在某种程度上是有限的。

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

    如果这不起作用,请在应用程序开始运行后尝试附加到应用程序(调试|附加到进程)。你可以通过按下“附加到”部分中间的“选择”按钮来选择调试模式。 你有来自微软的所有更新吗?也许有一个可以解决你的问题


    一般来说,混合模式调试在VS2008中似乎工作得更好。如果可以,我建议升级。有一个免费的版本,但我认为它在某种程度上是有限的。

    LanceSc的建议真的很有帮助。
    转到工具|选项,选择调试|常规。
    取消选中“仅启用我的代码(仅管理)”旁边的框

    这就解决了VS2008中的问题。

    LanceSc的建议真的很有帮助。
    转到工具|选项,选择调试|常规。
    取消选中“仅启用我的代码(仅管理)”旁边的框

    这就解决了VS2008中的问题。

    我记不起来了,有这么多,所有的最高关卡。编译器和链接器都有。我不记得了,有这么多,所有的最高级别。编译器和链接器。