EVC入门之二: 在未被加载的DLL中设置断点 (虽然没有遇到这个问题,不过先摘抄下来)
来源:互联网 发布:exp数据库导出指定的表 编辑:程序博客网 时间:2024/06/10 07:29
问题:
这个问题居然也郁闷了我一段时间。 我们假设在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时, 在这个问题上要被卡一下.
参考文章:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/_asug_setting_breakpoints.asp
关键点在最后"Limitations and Changes"这一小段里.
- EVC入门之二: 在未被加载的DLL中设置断点 (虽然没有遇到这个问题,不过先摘抄下来)
- 【Additional DLLs】在未被加载的DLL中设置断点
- A*算法(虽然还有蛮多看的不是很懂 还是保存下来先)
- 最近在学习c++语言,虽然自己才刚刚入门,不过,努力还是有机会的!
- 如何在VC的release编译中使用断点调试(摘抄)
- 在servlet设置javabean(最近学习j2ee遇到这个问题,在百度上找到的很好的回答)
- 如何在OD加载程序遇到入口点之前执行代码之二:静态装载DLL
- 以后在开发中遇到的问题将记录下来!
- 为什么#import "msado15.DLL" 在EXE中没有问题,DLL中老是编译不过,出现多个enum重复
- [一分钟学会系列之二]一分钟学会在VS中设置API断点
- 在WinDBG中设置断点的命令
- 在WinDBG中设置断点的命令
- 在WinDBG中设置断点的命令
- 在WinDBG中设置断点的命令
- 在OpenCv中,如果遇到了提示没有tbb_debug.dll的错误
- 在CSDN一哥们的Blog中发现一句话感觉深有感触,记录下来先--
- matlab学习中遇到的一些语句(记录下来)
- 项目中遇到的问题-图片未加载成功
- OpenCv和matlab对图像的读取
- VC++动态链接库(DLL)编程深入浅出(转帖:基础班)
- VC++动态链接库(DLL)编程深入浅出:Q&A(原创)
- DLL进一步讲解:extern C & __declspec(dllexport)
- 多个工程相互调用时,路径的问题
- EVC入门之二: 在未被加载的DLL中设置断点 (虽然没有遇到这个问题,不过先摘抄下来)
- 图像处理中的膨胀与腐蚀,基础入门
- VC Q&A (原创)
- CF-Div2-207-C题+线段树
- VC++6.0编译环境介绍
- vc6++Release和Debug
- IpIImage CvMat 转换方法
- 用截取的部分图像创建新图像--关于cvGetSubRect,cvGetImage的用法
- hsv空间