繁体   English   中英

无法从C#调试非托管Dll

[英]Cannot Debug Unmanaged Dll from C#

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

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

还有什么办法可以在dll源代码中进行调试?

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

要调试C ++ DLL,您需要在解决方案中的启动应用程序上启用混合模式调试。

  • 右键单击项目 - >属性
  • 转到“调试”选项卡
  • 选中“启用非托管代码调试”

这将允许您调试F5样式场景的本机代码。 如果要将其启用以附加到进程,请在“附加到进程”对话框中执行以下操作

  • 选择要调试的过程
  • 单击流程列表上方的“选择...”按钮
  • 单击“调试这些代码类型”
  • 检查Managed和Native

您需要启用非托管(本机)调试。

如果您在启动后附加到该进程:

转到“工具”菜单,然后附加到进程,确保已启用本机调试。

您将看到一个只读编辑框:

附加到:托管代码,本机代码[Select]

确保在那里列出本机代码。 如果没有添加它。

如果您从visual studio中启动项目:

在您以调试模式启动的项目属性上。 转到项目“属性”,然后选择“调试”选项卡。

确保选中此复选框:

启用非托管代码调试

附加到要调试的进程时,必须指定要附加的方式。 您有几个选项,即Managed和Native。 为了使用非托管C ++调试C#代码,您必须将进程作为Managed和Native附加(两者都可以同时选择)。

面对同样的问题并完成了所接受的答案中提出的所有问题,但非托管DLL中的断点没有被击中!

但是,当我做了以下我可以最终调试DLL!

在Solution Explorer中选择解决方案
Menu >> Tools >> options >> Debugging >> General
取消选中“ 要求源文件与原始版本完全匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM