c - 代码分析以识别影响特定代码行或变量的两次提交之间的所有更改
问题描述
我有两个版本的源代码,其中包含一长串代码更改(大约 500 个)(不幸的是没有可用的代码历史记录)。我想分割出任何对特定变量 XYZ 产生影响或可能产生影响的变化。最终目标是能够运行代码的结果并将其与所有代码更新进行比较,其中部分更新不影响 XYZ,并且没有任何更新。
有没有办法运行,例如,一种代码分析来识别哪些代码行会影响特定的变量或代码行,然后自动分割出这些更改并创建一个补丁?我想最终在我目前拥有的两个版本之间进行一种中间提交。
代码是用 C 编写的,我使用 git 来跟踪我自己的历史,代码是在 Visual Studio 2019 中编译的。
解决方案
我不知道有任何软件可以做到这一点,因为在大多数编程语言中,它都是不平凡的。例如,如果您在 function 中获取指向该变量的指针f
,那么任何f
直接或间接调用的函数都可能受到该变量的影响,并且可能会修改它(即使以非严格定义的行为方式)。这是因为这些函数中的任何一个都可以接受指针(可能转换为另一种类型或整数)。类似地,如果该函数采用指针值或返回非 void,则任何调用者都可以修改该值(同样,通过各种强制转换)。
如果您将自己限制在 C 标准明确定义的事物上,则范围会小一些,但是许多重要的程序会表现出一些未定义的行为,这样的工具对于任何类型的系统编程都是完全不可用的。在那种情况下,这仍然是相当困难的。
在像 Rust 这样对可变性和引用有严格限制的语言中,这可能会稍微容易一些,但即便如此,我怀疑你的问题在一般情况下很可能归结为解决停止问题,或者至少非常困难解决。当然,您的特定代码可能要简单得多。
推荐阅读
- google-analytics - 设置新的 Web+App Google Analytics 的最佳做法是什么?
- python - python 3.6解析和构造三个等长列表
- python - OOP 中的 staticmethod 和 __init__
- sql-server - SQL删除存在值的行和具有该值的后续列
- python - 如何将图像插入 sqlite3 数据库?
- r - GenomicRanges 在 R 上加载 DESeq2 库时出错
- vue.js - Vue vuetify v-dialog 防止屏幕滚动
- avfoundation - `AVMutableCompositionTrack.insertTimeRange` 失败并出现错误 -11800
- c# - Blazor WebAssembly API 中是否有 Json 的替代品?
- typescript - 如何在 Typescript 上做猫鼬模型自我参考?