【发布时间】:2012-04-26 02:18:53
【问题描述】:
在类似于以下每个示例的代码中,我希望能够静态分析代码以确定传递给 SpecialFunction() 的可能值列表。
SpecialFunction(5); // A
int x = 5;
SpecialFunction(x); // B
int x = 5;
x = condition ? 3 : 19;
SpecialFunction(x); // C
我已经可以将 C# 解析为抽象语法树,并且我已经可以处理像 A 这样的情况,我想我可以跟踪值的初始分配来猜测情况 B,但是像 C 一样简单的情况似乎变得复杂了很快。
我几乎可以肯定,我们无法在所有情况下静态求解 x,这没关系。我想知道尝试它的策略,以及识别何时无法完成的方法。如果我们需要包含类级别的字段和多线程怎么办?关闭?如果我们知道对于x、|X| < 50 的所有可能值的集合X 会有帮助吗?
根据@Vladimir Perevalov 的建议,Pex 中的概念如何应用于查找目标代码点的可能值(而不是 Pex 似乎所做的是发现导致 unchecked(? ) 例外情况)?
【问题讨论】:
-
+1。不要认为猜测指定参数取值范围可能的失败/成功是静态分析的“职责”,很可能是
dynamic analysis的“职责”。但即使是这样,在 this 的情况下,你只处理 几个 参数,如果你处理一个函数,比如IEnumerable<int>GetValuesForx(...)呢? -
@Tigran - 运行或模拟程序(或片段)不是一种选择。此外,显然在某些情况下静态分析可以提供答案 - 显然在某些情况下无法提供答案。我正在尝试识别并实现可能的情况。
标签: c# static-analysis pex c#-5.0 roslyn