读书人

BoundChecker 7.2 的有关问题

发布时间: 2012-02-15 12:09:44 作者: rapoo

BoundChecker 7.2 的问题
BoundChecker 7.2 怎么在VC 6.0下,使用FinalCheck? 请大家帮忙,谢谢.

[解决办法]
启用FinalCheck模式(基于VC6)
  1. 在VC的菜单里的“BoundsChecker”
    a. 选中“Error Detection” (选中此项让你在调试运行时让BoundsChecker同时检测程序的错误,不选中就是普通的调试程序)
    b. 选中“Log Event”
    c. 去掉“Display error and pause”(出现错误时是否立即提示,可以试试选中它看看是什么效果)
    d. 点击"Settings..."在左边选择Memory Tracking,在右边选中Enable FinalCheck(编译时加入BoundsChecker的诊断代码,不再需要此功能时,要把这个选项去掉再把工程重新编译一遍)
  2. 在VC的菜单里打开“BoundsChecker->Settings...”确认里面的“Memory Tracking->Enable FinalCheck”被选中。
  3. 重新编译你的工程,这时BoundsChecker会在编译的过程中插入些诊断代码用于之后的监测。(如果编译不通过,参看附录2)
  4. 按F5调试运行你的程序
  -这时你的程序就在BoundsChecker的监测下运行起来了。

查看错误信息
  此时你的解决方案里会多出一个 DevPartner Sessions->BoundsChecker->BoundsChecker-Active Session
  双击它可以看到目前出现的错误。
  我们关注Errors那个页签,其他的可以自行研究。这里有很多错误。有的会有源码。
  不明的这个错误说什么的可以右键点击这个错误,点击explain里面有很详细的解释。

性能及相关设置
  FinalCheck是很耗cpu和内存资源的,所以如果机器不好,可能会非常慢。这里可以做想应设置先去掉一些检测功能来加快速度。
  打开BoundsChecker的选项“BoundsChecker->Settings...”
  1. Resource Tracking里的Enable resource tracking可以先去掉,因为暂时不需要对资源的检测
  2. Memory Tracking中是对不同的情况进行监测,可以先去掉一些你不关心的。或是一次只监测一部分。

其他问题:
  1. 如果你的解决方案里含有多个项目,那要注意FinalCheck是对于项目的,要注意哪个是当前项目。
  2. 遇到其他问题可以查看BoundsChecker的帮助,或在网上搜索。帮助在安装目录下的help里的bc7.chm
  3. 如果不使用集成到VC里的BoundsChecker,也可以使用安装目录下的BC7.exe去打开你的程序exe运行。
   但编译还是要按上面所说的编译。另注意BC7.exe的"setting->Memory Tracking->Enable FinalCheck"要被选上。
  4. 如果过程中你遇到问题欢迎跟贴
附录1: BoundsChecker的FinalCheck模式能检测出的错误列表

 Pointer Errors - 指针错误
  Array index out of range - 使用越界的数组索引
  Assigning pointer out of range - 使用越界的指针
  Expression uses dangling pointer - 使用野指针
  Expression uses unrelated pointer - 不相关指针相互比较
  Function pointer is not a function - 函数指针指向的不是函数地址

 Memory Errors - 内存错误
  Reading overflows memory - 越界读内存
  Reading uninitialized memory - 读未初始化的内存
  Writing overflows memory - 越界写内存

 Leak Errors - 泄漏
  Memory leaked due to free - 未释放内嵌指针导致的内存泄漏
  Memory leaked due to reassignment - 指针重赋值导致的内存泄漏
  Memory leaked leaving scope - 离开作用域导致的内存泄漏
  Returning pointer to local variable - 返回局部变量的指针

附录2:与FinalCheck冲突的编译参数

 在使用FinalCheck重新编译工程的过程中可能会出现一些编译错误,因为FinalCheck跟一些编译选项有冲突,
 目前所知的有:
 a. 关掉“常规->全程序优化”
 b. “C/C++ -> 优化 -> 内联函数展开”设成默认。
 遇到其他问题对照它给出的信息做相应设置修改就行了。

网上搜索的,修改了一下。希望能帮到楼主。

读书人网 >VC/MFC

热点推荐