在比较静态分析报告时处理代码移动

时间:2016-12-17 01:26:21

标签: static-analysis

当我在代码库上运行静态分析工具时,我得到的结果如下:

...
arch/powerpc/kernel/time.c:102:5: warning: symbol 'decrementer_max' was not declared. Should it be static?
arch/powerpc/kernel/time.c:138:1: warning: symbol 'rtc_lock' was not declared. Should it be static?
arch/powerpc/kernel/time.c:361:37: warning: implicit cast to nocast type
...

我希望跟踪警告的数量以及人们在更改时在代码中的位置。

我可以diff运行静态分析的结果,但是如果有人在第{50行的time.c中插入了一些代码,则上面的警告会移动,并且因为行号已更改,差异会告诉我他们已经改变了。

我应该如何以处理文件中代码移动的方式比较这些内容?

谷歌搜索“智能差异”等并没有提高效率:它们主要是代码的智能差异,而不是智能差异日志。像Greylog或Kibana这样的日志分析工具似乎也不合适,更多地针对不同的和更一般的分析而设计,而不是针对这个非常具体的任务。

有什么明显的东西让我失踪吗?或者这是一个我应该期望编写自己的工具的问题吗?

2 个答案:

答案 0 :(得分:1)

您可以维护代码和错误的合并:在相应的代码行之后插入每条错误消息(减去其行号)。然后,如果有人在第50行插入代码,则(更新的)合并将不会在后面的错误点周围出现差异。当然,它会在第50行有一个差异,您可能会对此感兴趣,也可能不会感兴趣。如果您愿意,可以忽略不包含错误消息的差异块(您为此而言# 39; d在每个插入的错误消息中需要一些独特的标记。)

答案 1 :(得分:0)

我有一个稍微简单的设置 - 正如@ajd建议的那样,解析消息,并进行行号不敏感的匹配。

代码在https://github.com/daxtens/smart-sparse-diff