开发者社区> 文艺小青年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

EVC入门之二: 在未被加载的DLL中设置断点

简介:
+关注继续查看

问题:

这个问题居然也郁闷了我一段时间。 我们假设在EVC里建立了一个project, 里面有SubProject_1(以下简称SB1,嘿嘿), 编译生成一个EXE; SubProject_2(以下简称SB2)编译生成一个DLL;并且已经设置好SB1 "depend on" SB2,  在SB1运行的时候, 使用LoadLibrary函数动态加载SB2.DLL. 那么, 如果我在SB1和SB22里面各加断点若干, 然后按下F5(GO), 就会出现这样的警告框



这时候如果程序停在SB1里的断点时,按CTRL+B看一看,就会发现SB1里面的断点仍然存在, 而SB2里面的断点已经被diable掉了, 如图



这时候如果你试图去把那些勾勾点上,EVC就跳出来说“No code exists at the line number for breakpoint", 如下图。



以前临时的解决方法是在LoadLibrary之后加一个断点,当程序停在那里时,再调出这个Breakpoint List, 对里面被DISABLE掉的断点重新ENABLE。 但这是SB1 LOAD SB2的简单情况,如果还有SB3,SB4,SB5.... 并且会根据运行时的情况在IF语句里加载,那就更麻烦了,每个LoadLibrary后面加断点停下来,然后去手工ENABLE……那就真的SB了。


解决方法:

在EVC里Project -> Settings, 然后切换到SB1这个SubProject, 右边选Debug sheet, 然后在Category里面选”Additional DLLs",  在Modules里面添加需要”预加载“的DLL。对于我现在编译PC本地代码,然后下载到目标板上运行的情况,只要设置Local Name就行了,如下图



这样在GO的时候,首先是DOWNLOADING,然后在Debug Ouput Window会看到这样几行
Loaded symbols for 'D:\SOURCE_CODE\BreakPointSample\SB2\ARMV4IDbg\SB2.dll'
Loaded symbols for 'D:\SOURCE_CODE\BreakPointSample\SB3\ARMV4IDbg\SB3.dll'
SB1.exe

也就是说,在运行SB1之前,已经预加载了SB2和SB3, 这样未在代码中加载的DLL里设置的断点就不会被DISABLE掉了。如果不加入这些Addtional DLLs, 那么在DOWNLOAD结束后, Debug ouput里只显示
SB1.exe
然后马上弹出文中第一个警告框说breakpoints have been disabled.

特别强调一点,修改Additional DLLs后不需要重新编译就能起效果. 预加载DLL和编译代码本身没联系.

本方法适用于EVC和VC, 而VS和PB里面是"you can set a breakpoint on a DLL that is not yet loaded. The Additional DLLs dialog box no longer exists"的, 所以用惯了PB的人换EVC时, 在这个问题上要被卡一下.


本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2006/06/21/431283.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ETL(五):排序转换器组件的使用(二)
ETL(五):排序转换器组件的使用(二)
11 0
sql一张表中两个字段指向同一个外键
在项目开发中遇到这么一个例子,首先产品表 tb_product ----------------------------- id    name 1     手机 2    电脑 3     笔记本   第二张表 tb_product_chain(产品链) ---------...
901 0
CentOS7 修改网卡名称为eth0 & 在VMWare中添加多网卡配置
目录 目录 前言 在CentOS 7 中为什么这样命名网卡 在RHEL7中使用RHEL6的网卡命名规则 在VMWare中为CentOS7添加网卡设备 前言 无论是RHEL 7、还是CentOS 7都使用了NetworkManager.service来进行网络管理,当然network服务还是可以继续使用的,但也将会是过渡期的残留品了。
1365 0
解决:eth0网卡无法自动加载,网卡配置信息不在network-scripts中
 问题场景:eth0网卡无法自动加载,网卡配置信息不在network-scripts中 解决: 1》vi /etc/rc.d/rc.loacl  最后加入 ifup eth0 2》reboot 3》测试 换个ip,   service network restart   是否有效 或者桌面环境观察网卡状态是否在连接 4》ifconfig -a  查看 eth0信息是否改变
2134 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载