从 C++ 应用程序调试动态加载的 C++/CLI DLL
Posted
技术标签:
【中文标题】从 C++ 应用程序调试动态加载的 C++/CLI DLL【英文标题】:Debug a dynamically loaded C++/CLI DLL from a C++ application 【发布时间】:2015-10-06 17:29:35 【问题描述】:我是 Visual Studio 中的 C++ 新手。
我开发了一个 VS 解决方案:
一个 C++/CLI DLL 项目 (A) 一个 C++ 控制台项目 (B),它使用LoadLibraryW
动态加载 A
当我运行 B 时,我还需要在 A 中进行调试。但是 A 代码中的断点不起作用,它们有一个警告字形,说明这里不可能中断。
我尝试了很多设置,但没有任何效果。这不是一件容易的事吗?谢谢!
【问题讨论】:
项目 > 属性 > 调试 > 调试器类型 = 混合。然后工具>选项>调试>常规,勾选类似于“托管兼容模式”的选项。 LoadLibrary 不会神奇地启用托管代码,需要先加载和初始化 CLR。使用 COM 或自定义 CLR 托管。或者,如果您真的,真的,真的必须使用 __declspec(dllexport) 入口点。您不必这样做,异常很难处理。 @HansPassant 这不是你第一次救我!! :) 非常感谢你。将调试器类型设置为混合解决了它。 “使用托管兼容模式”已被选中。您能否发表您的评论作为答案,以便我接受?无论如何,我使用 __declspec(dllexport) 因为否则我无法 GetProcAddress 我的 DLL 方法......而且我不知道其他方法...... @HansPassant 好的,我会发布它...无论如何我无法理解有人给我的反对票 我在两个项目上都将 Debuggermode 设置为 Mixed,并设置了 Managed Compat。 “需要先加载 clr”是什么意思? 【参考方案1】:感谢@HansPassant,解决方案是设置此属性:
项目 > 属性 > 调试 > 调试器类型 = 混合 工具 > 选项 > 调试 > 常规,勾选“使用托管兼容模式”。LoadLibrary
不会神奇地启用托管代码,需要先加载和初始化 CLR。
【讨论】:
以上是关于从 C++ 应用程序调试动态加载的 C++/CLI DLL的主要内容,如果未能解决你的问题,请参考以下文章