几个实用的软件开发工具之——代码检测工具
3代码检测工具
介绍几个动态和静态代码检测工具,可以帮助发现代码BUG。
3.1 MEMWATCH
MEMWATCH 由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具,您可以自己下载它(请参阅本文后面部分的 参考资料)。只要在代码中添加一个头文件并在 gcc 语句中定义了 MEMWATCH 之后,您就可以跟踪程序中的内存泄漏和错误了。MEMWATCH 支持 ANSI C,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous free)、没有释放的内存(unfreed memory)、溢出和下溢等等。
清单 1. 内存样本(test1.c)
#include
#include
#include "memwatch.h"
int main(void)
{
char *ptr1;
char *ptr2;
ptr1 = malloc(512);
ptr2 = malloc(512);
ptr2 = ptr1;
free(ptr2);
free(ptr1);
}
清单 1 中的代码将分配两个 512 字节的内存块,然后指向第一个内存块的指针被设定为指向第二个内存块。结果,第二个内存块的地址丢失,从而产生了内存泄漏。
现在我们编译清单 1 的 memwatch.c。下面是一个 makefile 示例:
test1 gcc -DMEMWATCH -DMW_STDIO test1.c memwatch.c -o test1
当您运行 test1 程序后,它会生成一个关于泄漏的内存的报告。清单 2 展示了示例 memwatch.log 输出文件。
清单 2. test1 memwatch.log 文件 MEMWATCH 2.67 Copyright (C) 1992-1999 Johan Lindh
...
double-free: <4> test1.c(15), 0x80517b4 was freed from test1.c(14)
...
unfreed: <2> test1.c(11), 512 bytes at 0x80519e4
{FE FE FE FE FE FE FE FE FE FE FE FE ..............}
Memory usage statistics (global):
N)umber of allocations made: 2
L)argest memory usage : 1024
T)otal of all alloc() calls: 1024
U)nfreed bytes totals : 512
MEMWATCH 为您显示真正导致问题的行。如果您释放一个已经释放过的指针,它会告诉您。对于没有释放的内存也一样。日志结尾部分显示统计信息,包括泄漏了多少内存,使用了多少内存,以及总共分配了多少内存。
注意:我发现我们写的程序在使用这个工具时,必须要捕捉异常信号,比如“ctrl+c”,”killall”,内存异常等,并且捕捉后在main函数中return,才能够参数内存日志文件memwatch.log。
另外由于malloc函数我们进行过封装,所以,这个工具必须和我们的lib_base动态库配合使用。
同样可以调试内存的工具如:YAMD,valgrind,可以参考培训文件夹中相关内容。Valgrind功能相对来说强大一些,可以查看内存越界等。但是好像所有的工具都无法检查局部变量(局部数组)的越界问题。
3.2 resourcewatch
资源检测工具是我们公司自己开发的一个工具。所谓的资源,就是计算机中数量有限、有用的东西:包括内存、socket套接字、文件句柄、二叉树句柄、数据库连接句柄、数据库数据集、fifo列表等。
资源基本的思想和memwatch一样。为每种资源类型申请一个二叉树,然后将资源申请和函数用资源检测资源申请和释放函数替换:
int socket(int port);
int rw_socket(int port, const char *file, int line);
#define socket(port) rw_socket(port, __FILE__, __LINE__)
这样在申请资源的时候,添加一个二叉树的节点,记录申请的资源值,以及文件名,行号。之后在资源释放的时候根据资源的值,删除二叉树的节点。在程序结束的时候,调用资源使用情况的打印函数,打印出未释放,多重释放的资源的文件名和行号,便于定位问题。
系列文章:
《 代码编辑工具 》
《版本管理工具 》
《 代码检测工具 》
《性能优化工具 》
《功能测试工具》
几个实用的软件开发工具之——代码检测工具相关推荐
- c语言静态检测工具,静态代码检测工具---PC-lint(for c/c )
近来由于项目的需要,本来想使用unstand c++或者C++ test来检查我们既有代码中函数申明与使用不一致的错误,因为sv项目是用纯C来写的,所以,编译时编译器看到.c后缀自动使用c编译器进行编 ...
- 几个实用的软件开发工具之——代码编辑工具
1 代码编辑工具 1.1 source insight Source insight 是一款非常优秀的代码编辑软件,支持创建工程(同时支持网络创建),语法着色,词语联想,它的代码搜索功能非常强大,非常 ...
- 三款好用的软件代码检测工具
Fortify 是一款由 Hewlett Packard Enterprise (HPE) 公司开发的源代码检测工具,Fortify可以检测代码中的安全漏洞和缺陷共900多种,它通过对应用程序的源代码 ...
- 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布
根据全球知名IT研究与顾问咨询公司Gartner统计,从2010年到2018年软件代码中采用开源框架或组件.第三方库的比例每年以30%的速度增长,大量的软件系统引入开源代码和第三方库,有的系统引用开源 ...
- linux图片相似度检测软件下载,文档相似性检测工具
文档相似性检测工具是通过比对源文档和目标文档的相似性给出相似度结果的一种信息处理系统.可以分段粘贴进去查 的确很给力哦.文档相似性检测工具和其他系统覆盖文献有80%以上不同,本系统通过混合引擎覆盖18 ...
- 【开发工具】【sparse】Linux下代码检测工具(sparse)的使用
获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中: [开发工具]嵌入式常用开发工具汇总帖 Linux内核源码里其实包含了相应的代码检测工具[sparse],位置在: Documentation ...
- 5 款阿里常用代码检测工具,免费用!
作者 | 喻阳 面临问题 在日常研发过程中,我们通常面临的代码资产问题主要分为两大类:代码质量问题和代码安全漏洞. 1.代码质量问题 代码质量其实是一个老生常谈的话题,但问题是大家都知道它很重要,却又 ...
- coverity代码检测工具介绍_微服务测试之静态代码扫描
静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...
- Windows下 C++代码检测工具
最近在查阅一些windows系统下的C++代码及性能检测工具, 按照检测类别分别静态检测和动态检测. 静态检测: 在程序没有被实际执行的情况下执行的计算机软件分析,大部分是对源代码的分析和检测. 动态 ...
最新文章
- 宝塔ssl验证域名失败_宝塔SSL配置教程
- python验证码_Python验证码登录(Tesseract安装配置)
- NetBeans Weekly News - Issue # 446 - Jul 20, 2010
- python del函数_python中del函数的垃圾回收
- Redis通过哨兵模式实现主从复制的分布式
- 细胞自动机 c语言程序,Processing精彩例程之细胞自动机
- 一个 Java 的 Socket 服务器和客户端通信的例子
- Linux 受到开发者偏爱的 9 个理由
- sqlserver 分割多个文件_鸿萌易备:SQL Server 数据库的全方位备份解决方案
- 【Hack The Box】windows练习-- Conceal
- JS表单验证,最详细步骤,代码
- 灰色系统理论及其应用 (一) :灰色系统概论、关联分析、与传统统计方法的比较
- 网易2020校招数据分析方向正式批笔试题 解析
- coreldraw怎么扣圆形_coreldraw如何抠图?coreldraw抠图图文教程
- 一分钟解决Chrome浏览器主页被hao123、360和2345篡改简单有效方法
- linux下静态库、动态库总结
- SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧
- Inc. magazine年度公司Evernote: 小小记事本如何风靡全球
- pyTorch 图像分类模型训练教程
- python弹性碰撞次数圆周率_碰撞出来的圆周率(一)