我有一个需要调试的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退出了调试模式。
但是,断点没有被击中。
我有什么需要特别照顾的吗?
答案 0 :(得分:0)
很有可能,托管.exe尚未加载本机DLL。或者它加载了错误的DLL版本,而不是您正在调试的DLL。
要进行故障排除,请在您的本机代码中添加__debugbreak();
调用。除非您弄乱了结构异常处理,否则这种断点极不可能被忽略。 Windows将显示一条消息,提示您附加调试器,您可以选择Visual Studio的现有实例。附加后,“模块”窗口将准确显示加载的本机DLL的哪个版本。
永久解决此问题的最佳方法是在单个Visual Studio解决方案中添加两个项目,设置依赖关系,并确保DLL输出位置是EXE查找库的位置。我在VS2017中一直这样做,启用了本机代码调试后,我可以在托管代码或本机代码中设置断点,这对调试内部操作很有帮助。