在 Visual Studio 中调试由非托管 C++ 二进制文件加载的 .NET COM DLL
Debugging a .NET COM DLL loaded by unmanaged C++ binary in Visual Studio
我正在使用 VS2010。我有一个用 C++ 编写的非托管 EXE,它使用 .NET COM 组件,它也是同一解决方案的一部分。我知道 COM 对象创建成功,因为 CoCreateInstance 没有错误返回。然而,组件符号未加载(我也注意到无法在 .NET 项目源文件中创建断点),因此我无法进入对象方法的代码。
我试图将 .NET DLL 的 PDB 复制到 EXE 的相同输出目录中,但也没有帮助。解决方案中的所有项目都是 x64 并且调试模式设置为混合。
如果这很重要,DLL 是使用命令 regasm /codebase
注册的
有什么想法吗?谢谢
是的,您必须启用托管调试。 Visual Studio(至少是 2008 年和 2010 年——不知道以后的版本)的一个问题是您只能使用 32 位进程同时调试本机代码和托管代码。对于 64 位进程,您必须调试一种类型或另一种类型,但不能同时调试两种类型。我想您可能能够启动 Visual Studio 的另一个实例,并使用一个实例调试 Native,并使用另一个实例进行管理。
在您的项目设置下,转到 "Configuration Properties" - "Debugging" 页面。在右侧转到调试器类型和 select 混合。
我正在使用 VS2010。我有一个用 C++ 编写的非托管 EXE,它使用 .NET COM 组件,它也是同一解决方案的一部分。我知道 COM 对象创建成功,因为 CoCreateInstance 没有错误返回。然而,组件符号未加载(我也注意到无法在 .NET 项目源文件中创建断点),因此我无法进入对象方法的代码。
我试图将 .NET DLL 的 PDB 复制到 EXE 的相同输出目录中,但也没有帮助。解决方案中的所有项目都是 x64 并且调试模式设置为混合。
如果这很重要,DLL 是使用命令 regasm /codebase
注册的有什么想法吗?谢谢
是的,您必须启用托管调试。 Visual Studio(至少是 2008 年和 2010 年——不知道以后的版本)的一个问题是您只能使用 32 位进程同时调试本机代码和托管代码。对于 64 位进程,您必须调试一种类型或另一种类型,但不能同时调试两种类型。我想您可能能够启动 Visual Studio 的另一个实例,并使用一个实例调试 Native,并使用另一个实例进行管理。
在您的项目设置下,转到 "Configuration Properties" - "Debugging" 页面。在右侧转到调试器类型和 select 混合。