在类似于以下每个示例的代码中,我希望能够静态分析代码以确定传递给 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
的集合会有所帮助|X| < 50
吗?
根据@Vladimir Perevalov 的建议,Pex 中的概念如何应用于查找目标代码点的可能值(而不是 Pex 似乎所做的是发现导致未检查(?)异常情况的代码路径和值)?