我在一个C代码库上使用Gimpel的PC-Lintv8.00,希望了解它是如何遍历模块的。PC-lint手册只说PC-Lint“跨越多个模块”。它是如何做到这一点的?例如,它是否从一个模块开始,并将所有相关的包含文件和源文件合并到一大段代码中进行分析?为了理解程序流,它的搜索深度有多深?
在第二个相关的问题中,我有一个用例,在这个用例中,一次从代码库中插入一个C模块对我来说是有益的,而不是将长长列表中的每个C模块都提供给PC-Lint。但是,如果我只提供了一个C模块,它会自动找到它所依赖的其他C模块,并使用这些模块来理解指定C模块的程序流程吗?
发布于 2012-10-30 23:27:23
当PC Lint解析您的源文件时,它会创建某种类型的运行时数据库,注意全局变量、外部声明等。当它处理完所有编译单元(包含所有包含文件的C文件,递归地)时,它会执行链接器所做的工作来生成输出,但它不是生成代码,而是报告某些类型的错误,例如:尚未使用的外部声明、未使用的原型没有实现、未使用的全局函数。这些问题并不总是由链接器报告的,因为代码生成的可能性很大:这些项从未在任何地方使用过!
搜索深度可能会受到选项-passes的影响,该选项以执行时间为代价实现了更好的值跟踪。请参阅PDF手册中的第10.2.2.4节(适用于版本9.x)。
对于您的第二个问题,否,如果您只在Lint命令行上提供一个(或几个)源(C)文件名,则PC Lint将仅处理该文件-并且所有包括递归使用的文件。您可能希望使用“单元结帐”的选项-u来告诉PC Lint它只处理整个项目的一部分。
发布于 2017-03-06 09:07:02
我认为原则上你是在问LINT对象模块,请参阅Lint手册PDF的第9章。使用lint -u a1.c -oo处理a1.lob,然后可以再次使用lint *.lob将其链接在一起,以产生模块间消息。
你还问了一个相关的、具体的问题( Any tips for speeding up static analysis tool PC-Lint? Any experiences using .LOB files?),但我不确定我是否理解你对“你说它对脱棉时间有多大的影响?”的担忧,因为我会说这要视情况而定。你现在的打线时间/速度是多少?你几年前发的帖子,在一台新机器上运行作业怎么样,新的cpu?KR
https://stackoverflow.com/questions/13118704
复制相似问题