我有一个用C++
编写并从C#
应用程序调用的DLL。 DLL
是非托管代码。
如果我将带有post build事件的DLL
及其.pdb
文件复制到C#
应用程序的调试执行dir
,我仍然无法达到任何突破点放入DLL
代码。断点附有一条消息,说“没有为此文档加载符号”。
我需要做些什么才能在dll
来源中进行调试?
我有“Tools
- > Options
- > Debugging
- > General
- > Enable
只有我的代码”已停用。
正在使用“运行时跟踪和禁用优化(/ ASSEMBLYDEBUG)”编译DLL
并将“生成调试信息”编译为“是(/ DEBUG)”
答案 0 :(得分:58)
要调试C ++ DLL,您需要在解决方案中的启动应用程序上启用混合模式调试。
这将允许您调试F5样式场景的本机代码。如果要将其启用以附加到流程,请在“附加到流程”对话框中执行以下操作
答案 1 :(得分:4)
您需要启用非托管(本机)调试。
如果您在启动后附加到该流程:
转到“工具”菜单,然后附加到进程,确保已启用本机调试。
您将看到一个只读编辑框:
附加到:托管代码,本机代码 [选择]
确保在那里列出本机代码。如果没有添加它。
如果您是从visual studio中启动项目:
在以调试模式启动的项目属性上。转到项目“属性”,然后选择“调试”选项卡。
确保选中此复选框:
启用非托管代码调试
答案 2 :(得分:1)
附加到要调试的进程时,必须指定要附加的方式。您有几个选项,即Managed和Native。为了使用非托管C ++调试C#代码,您必须将进程附加到Managed和Native(两者都可以同时选择)。
答案 3 :(得分:0)
遇到了同样的问题并完成了所接受答案中提出的所有问题,但非托管DLL中的断点没有被击中!
然而,当我做了以下我可以最终调试DLL!
在Solution Explorer中选择解决方案
选择Menu
>> Tools
>> options
>> Debugging
>> General
取消选中“要求源文件与原始版本完全匹配”