问题:

这个问题居然也郁闷了我一段时间。 我们假设在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中设置断点 (虽然没有遇到这个问题,不过先摘抄下来)的更多相关文章

  1. c#动态加载卸载DLL

    前段时间工作的时候遇到一个问题.就是需要每次启动程序的时候动态替换掉某个dll,所以就百度了这方面的资料.这次记录下来让自己以后可以看. 根据自己的理解,动态卸载dll需要有以下条件: 1:dll在加 ...

  2. jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)

    jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)   瀑布流-绝对定位布局,与浮动布局的区别在于 1.布局不一样: 绝对定位:一个UL里面放置所有的绝对定位的LI: 浮动布局:多个(一 ...

  3. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  4. CAD 二次开发 -- 自动加载开发的DLL

    CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...

  5. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  6. Cesium入门9 - Loading and Styling Entities - 加载和样式化实体

    Cesium入门9 - Loading and Styling Entities - 加载和样式化实体 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://c ...

  7. Android学习笔记(二)之异步加载图片

    最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存 ...

  8. C# 加载 SQLite DLL问题

    /********************************************************************************* * C# 加载 SQLite DL ...

  9. java动态编译类文件并加载到内存中

    如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...

随机推荐

  1. 提升Web性能的技巧

    1.  采用反向代理服务器(Reverse Proxy Server)来对应用进行加速和保护 其作用主要在以下三方面: 负载平衡 – 运行在反向代理服务器上的负载平衡器会在不同的不服务器  间进行传输 ...

  2. link标签的rel属性

    <link>标签定义了当前文档与 Web 集合中其他文档的关系.link 元素是一个空元素,它仅包含属性.此元素只能存在于 head 部分,不过它可出现任何次数.在 HTML 中,< ...

  3. HDOJ Oulipo 1686【KMP】

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  4. Lua学习一----------开发环境搭建

    © 版权声明:本文为博主原创文章,转载请注明出处 1.LuaDist下载地址:http://luadist.org/ 2.LuaRocks下载地址:https://github.com/luarock ...

  5. cmake学习之-project

    一.系统版本 cmake version: 3.5.2 系统版本: Ubuntun 16.04 cmake docment: 3.14.4 最后更新: 2019-05-31 二.指令说明 projec ...

  6. centOS 7中上网以及网卡的一些设置

    在VMWare中安装LinuxOS是个非经常见的事情. 可是,关于虚拟机的上网问题.想在这里总结一下,里面还有不懂的问题.希望能够得到前辈的解惑. 一.VMWare网卡的设置的三种选项: Bridge ...

  7. jquery元素分组插件,用于把一连串元素分成多组,如把多个a标签分成多组放入<li>元素中,可以用于简化多图滚动为一个元素滚动,兼容ie6

    三个参数 <script type="text/javascript"> /* *sclass:设置包裹元素的类 * packages:设置包裹的元素 * row:设置 ...

  8. 根据URL发起HTTP请求,我的HTTPHelper。

     完整的demo using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  9. java中BigDecimal的学习

    干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉 ...

  10. 用GetTickCount()计算一段代码执行耗费的时间的小例子

    var aNow,aThen,aTime:Longint; begin aThen := GetTickCount(); Sleep();//代码段 aNow := GetTickCount(); a ...