首页 > 解决方案 > 代码分析以识别影响特定代码行或变量的两次提交之间的所有更改

问题描述

我有两个版本的源代码,其中包含一长串代码更改(大约 500 个)(不幸的是没有可用的代码历史记录)。我想分割出任何对特定变量 XYZ 产生影响或可能产生影响的变化。最终目标是能够运行代码的结果并将其与所有代码更新进行比较,其中部分更新不影响 XYZ,并且没有任何更新。

有没有办法运行,例如,一种代码分析来识别哪些代码行会影响特定的变量或代码行,然后自动分割出这些更改并创建一个补丁?我想最终在我目前拥有的两个版本之间进行一种中间提交。

代码是用 C 编写的,我使用 git 来跟踪我自己的历史,代码是在 Visual Studio 2019 中编译的。

标签: cgitanalysiscode-analysis

解决方案


我不知道有任何软件可以做到这一点,因为在大多数编程语言中,它都是不平凡的。例如,如果您在 function 中获取指向该变量的指针f,那么任何f直接或间接调用的函数都可能受到该变量的影响,并且可能会修改它(即使以非严格定义的行为方式)。这是因为这些函数中的任何一个都可以接受指针(可能转换为另一种类型或整数)。类似地,如果该函数采用指针值或返回非 void,则任何调用者都可以修改该值(同样,通过各种强制转换)。

如果您将自己限制在 C 标准明确定义的事物上,则范围会小一些,但是许多重要的程序会表现出一些未定义的行为,这样的工具对于任何类型的系统编程都是完全不可用的。在那种情况下,这仍然是相当困难的。

在像 Rust 这样对可变性和引用有严格限制的语言中,这可能会稍微容易一些,但即便如此,我怀疑你的问题在一般情况下很可能归结为解决停止问题,或者至少非常困难解决。当然,您的特定代码可能要简单得多。


推荐阅读