无法从C#调试非托管Dll

时间:2009-11-16 21:12:32

标签: c# c++ visual-studio-2008 debugging breakpoints

我有一个用C++编写并从C#应用程序调用的DLL。 DLL是非托管代码。

如果我将带有post build事件的DLL及其.pdb文件复制到C#应用程序的调试执行dir,我仍然无法达到任何突破点放入DLL代码。断点附有一条消息,说“没有为此文档加载符号”。

我需要做些什么才能在dll来源中进行调试?

我有“Tools - > Options - > Debugging - > General - > Enable只有我的代码”已停用。 正在使用“运行时跟踪和禁用优化(/ ASSEMBLYDEBUG)”编译DLL并将“生成调试信息”编译为“是(/ DEBUG)”

4 个答案:

答案 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 取消选中“要求源文件与原始版本完全匹配