完美解决“当前不会命中断点,还未为文档加载任何符号”的问题

本文介绍了在使用VC2008调试C++ DLL时遇到的“当前不会命中断点,还未为文档加载任何符号”以及“找不到函数入口点”问题。通过分析发现,这两个问题的根源在于DEF文件未正确绑定到项目属性中。正确绑定DEF文件后,调试和入口点问题得到解决。

遇到这个问题是我正在用vc2008 调试一个 C++写的 Dll,dll 在编译中没有报错,但在用VB.net写的程序调用此 Dll 时,才会报告 于 "xxx.dll 中找不到  XXX 函数的入口点"。所以我转的对 Dll 断点调试,结果另一问题:“当前不会命中断点,还未为文档加载任何符号”。

查找解决办:网点有很多,都不是完美解决问题。其中一个解决办法是:

在 /工具/选项/调试/常规  :取消勾选 "要求源文件与原始版本匹配"。

现在 dl 可以调试了 ,但“当前不会命中断点,还未为文档加载任何符号”的提示还在。在断点可命中了。调用 dll 时的错误:"xxx.dll 中找不到  XXX 函数的入口点" 仍在。

经过多次试错,终于找到了原因。上述我遇到 的两个问题,其实是一个原因产生,也是一个办法解决了 2 个问题。

最终原因:

dll的 定义文件 XXX.def,虽然已经添加到项目的解决方案中,但还没有如图 1 在项目/属性/链接属性/ 输入/模块定义文件 中"正确"绑定 .def 文件,且此 def 文件 必须写 Dll 文件同名, Dll才能被正确编译,否则编译会报告: def 中定义中 XXX 函数 无法解析。

并且在没有 由项目属性中绑定 ”链接/输入/模块定义文件“  *.def  文件时。  即使一个 .def 文件被添加进入 项目解决方案目录中, dll 被编译时,编译过程中链接器还是会无视  此.def 文件。此时 dll 中的函数不会被写入目标 Dll 中,所以此时编译出来的 dll 体积 很小,甚至 0KB 。 此时编译并不报错。 在编译完成后,有程序 调用此 Dll 时,才会报告 于 "xxx.dll 中找不到  XXX 函数的入口点"

所以此时编译出来的 Dll 与 Dll的源文件内容是不匹配的, 所以 vs 会报告:“要求源文件与原始版本匹配” 检查出错,  也正时因为 此时编译出来的 Dll  内的函数不全,与 Dll 源代码不匹配, 所有之后 dll 的断点调试中 才会出现 "此断点无法命中,没有为此文档加载任何符号"。

最终解决办法:正确地在项目属性的配置属性/链接/输入   中绑定 模块定义文件(XXX.def )。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值