C# 有没有工具可以分析c程序中变量之间的依赖关系?

C# 有没有工具可以分析c程序中变量之间的依赖关系?,c#,variables,refactoring,dependencies,static-analysis,C#,Variables,Refactoring,Dependencies,Static Analysis,我们可以使用许多工具来显示模块、源代码文件、类或函数等之间的依赖关系,但似乎没有工具来分析变量之间的依赖关系。给定变量的依赖关系图将有助于理解和重构代码 例如,如果变量b仅用于计算变量c的值,如下所示: b = a; .... c = b + 2; 也许我们可以删除变量b以使代码更具可读性: .... c = a + 2; 如果代码非常复杂或有很多不好的味道,这种重构可能会很困难 是否有任何工具可以分析c或其他编程语言中变量之间的依赖关系?Resharper是分析c代码的好工具。至少它会显示

我们可以使用许多工具来显示模块、源代码文件、类或函数等之间的依赖关系,但似乎没有工具来分析变量之间的依赖关系。给定变量的依赖关系图将有助于理解和重构代码

例如,如果变量b仅用于计算变量c的值,如下所示:

b = a;
....
c = b + 2;
也许我们可以删除变量b以使代码更具可读性:

....
c = a + 2;
如果代码非常复杂或有很多不好的味道,这种重构可能会很困难


是否有任何工具可以分析c或其他编程语言中变量之间的依赖关系?

Resharper是分析c代码的好工具。至少它会显示未使用的变量和赋值但从未使用的变量

如果您考虑对代码进行认真的重构,您可以编写单元测试以确保不会破坏某些东西。

微软研究院启用了一些非常有趣的工具。我看到的一个演示显示了突出显示数据依赖关系。因此,您可以在示例中将鼠标悬停在“c”上,所有有助于该计算的表达式都将高亮显示。与其说它是一个成熟的开发工具,不如说它更像是一个凤凰城的演示,但看到它可以实现,这非常酷。Phoenix是一个很好的应用程序,因此您可以看到其中包含了什么样的示例应用程序。

请参阅关于如何进行(控制和)数据流分析的讨论。这本质上是信息流的经典编译器分析,包括所谓的def使用链。使用链显示程序的其他部分如何使用值(特定赋值)

这些信息流是作为数据结构计算的,因此很容易直接看到。(该网页确实显示了图片,但它们被转储,并将图形结果馈送给dot。要将其变成一个工具,需要付出更多的努力

我们已经用它构建了程序切片器,可以在UI中显示这些信息。它们还没有上市


我想Grammatech为C和Ada制作了这样的程序切片器。

所谓“变量”是指“局部变量”吗,或者您是指局部、形式参数、数组元素、字段和未引用指针?您是否关心lambdas的外部变量?Lambda参数?lambdas中的局部变量?迭代器块中的提升局部变量?分析任意变量之间的关系可能非常复杂,比局部变量复杂得多,尤其是当您通过“REF”参数考虑变量混叠时,Eric Lippert:可以分析更多的“变量”类型,代码的重做工作就越容易。当我试图重构遗留代码时,发现通常有很多复杂的依赖关系。