3

我在 C 代码库上使用 Gimpel 的 PC-Lint v8.00,并希望了解它如何遍历模块。PC-lint 手册仅说 PC-Lint “查看多个模块”。它是如何做到的?比如,是不是从一个模块开始,把所有相关的包含文件和源文件组合成一大段代码来分析?为了理解程序流程,它搜索多深?

在第二个相关问题中,我有一个用例,一次从代码库中提取一个 C 模块而不是将长列表中的每个 C 模块提供给 PC-Lint 对我来说是有益的。但是,如果我只提供一个 C 模块,它会自动找到它所依赖的其他 C 模块,并使用这些模块来了解指定 C 模块的程序流程吗?

4

2 回答 2

4

PC Lint 在解析源文件时会创建某种运行时数据库,并记录全局变量、外部声明等内容。当它处理完所有编译单元(递归地处理所有包含文件的 C 文件)时,它会做什么链接器确实会生成您的输出,但它不会生成代码,而是报告某些类型的错误,例如:未使用的外部声明,未使用的未实现原型,未使用的全局函数。这些问题并不总是由链接器报告,因为代码生成非常有可能:这些项目从未在任何地方使用过!

搜索深度可以受选项影响-passes,这可以以执行时间为代价实现更好的价值跟踪。请参阅 PDF 手册中的第 10.2.2.4 节(适用于版本 9.x)。

对于您的第二个问题,不,如果您在 Lint 命令行上仅提供一个(或几个)源 (C) 文件名,PC Lint 将仅处理该文件 - 并且递归地处理所有使用的包含文件。您可能希望使用-u“unit-checkout”选项来告诉 PC Lint 它只处理完整项目的一部分。然后,Lint 将抑制对部分项目无用的某些类型的警告。

于 2012-10-30T15:27:22.570 回答
1

我认为原则上您是在询问 LINT 对象模块,请参阅 Lint 手册 PDF 的第 9 章。使用 saylint -u a1.c -oo生成 a1.lob,然后再链接在一起使用lint *.lob以生成模块间消息。

您还问了一个相关的具体问题(加速静态分析工具 PC-Lint 的任何提示?使用 .LOB 文件的任何经验?)但我不确定我是否理解您对“您说它对 linting 的影响有多大”的担忧时间?”,因为我会说这取决于。您当前的 lint-time / 速度是多少?您在几年前发布过,那么在一台新机器上运行这项工作怎么样?韩国

于 2017-03-06T01:07:02.150 回答