Sparse - a Semantic Parser for C
sparse 是用于 C 语言的语法分析器,用以对 C 代码进行静态检查,它不但可以检查 ANSI C 而且还能检查具有 gcc 扩展的 C 。在 Linux 中,不但可以检查用户端代码,还可以检查内核代码。起初它由 linus 编写,后来交给其他人维护。 可以从下面的网址获得该工具:
也可以通过 GIT 工具获得:
要获得最新的开发版还可以从下面的网址获得:
要么直接最新的下载压缩包:
下载 sparse 并解压缩后,可以在其源码目录下简单执行以下命令编译安装:
简单使用示例: 程序一:
使用 sparse 检查这个程序:
警告提示我们这个程序中的 main 函数不符合 ANSI 函数的声明标准。 改进方法是为 main() 函数添加上参数,即:
这样修改后再次检查时,则不会出现此警告。 程序二:
上面从 linux 内核代码中直接拷贝了用以实现 spinlock 的两个宏 __acquire(x) 和 __release(x) 。在这两个宏中,出现了 __context__ 标签,这个 __context__ 是一种 sparse 支持的检查特性。这里,如果函数里单独 __acquire() 而没有使用 __release() 与之匹配的话,sparse 会发出警告。顺便说一下,像自旋锁这种锁,如果忘记释放(不匹配使用),那么会造成整个内核死锁,这时候只能重启系统。使用 sparse 检查上面的程序会发现:
如果将 __release() 加上和 __acquire() 匹配的话,则警告消除。 | ||||
相关话题 |
sparse 工具的介绍及简单应用 __context__
最新推荐文章于 2024-09-30 23:35:28 发布