将DLL附加到托管进程不起作用

时间:2019-01-04 18:03:00

标签: c++ debugging dll process visual-studio-2017

我有一个需要调试的C ++ DLL项目(x86)。 这个DLL被一个exe占用。

我可以轻松地将VS2017中的DLL项目附加到本机exe(x86)。 当我在VS2017中的C ++ DLL项目中设置断点时,将击中这些断点。 这是正常的,期望的行为。

现在,我已将C ++ DLL项目附加到.NET exe(编译为x86)。 断点没有命中,我也不知道为什么它不能像本机exe一样工作。

我没有选中“使用应用程序框架”选项,但这没有任何改变。

我也尝试了“启用本机代码调试”选项,但没有成功。 另外,我尝试将其附加到NET exe的Debug版本和NET exe的Release版本。

我看到VS2017附加到正确的过程,就像我关闭NET exe时一样,VS2017退出了调试模式。

但是,断点没有被击中。

我有什么需要特别照顾的吗?

1 个答案:

答案 0 :(得分:0)

很有可能,托管.exe尚未加载本机DLL。或者它加载了错误的DLL版本,而不是您正在调试的DLL。

要进行故障排除,请在您的本机代码中添加__debugbreak();调用。除非您弄乱了结构异常处理,否则这种断点极不可能被忽略。 Windows将显示一条消息,提示您附加调试器,您可以选择Visual Studio的现有实例。附加后,“模块”窗口将准确显示加载的本机DLL的哪个版本。

永久解决此问题的最佳方法是在单个Visual Studio解决方案中添加两个项目,设置依赖关系,并确保DLL输出位置是EXE查找库的位置。我在VS2017中一直这样做,启用了本机代码调试后,我可以在托管代码或本机代码中设置断点,这对调试内部操作很有帮助。