C#静态分析,变量/参数的可能取值在类似于下面每个例子的代码中,希望能够静态分析确定SpecialFunction()可能值列表的代码。特殊功能(5);//整数x=5;特殊功能(x);//B整数x=5;x=条件?3:19;特殊功能(x);//C我已经可以将C#解析成一个抽象语法树,我已经可以处理像A这样的情况,我想我可以追踪初始赋值来猜测情况B,但是像C这样简单的情况似乎变得很复杂迅速地。我几乎可以肯定我们不能在所有情况下都静态地求解x,但这没关系。我想知道尝试它的策略,以及识别何时无法完成的方法。如果我们需要包含类级字段和多线程怎么办?关闭?如果我们知道x,|X|的所有可能值的集合X会有帮助吗?<50?|X|<50?从@VladimirPerevalov的建议来看,Pex中的概念如何应用于为目标代码点查找可能的值(而不是Pex似乎所做的是发现导致未检查(?)异常情况的代码路径和值)?有一个项目可以满足您的需求(至少非常接近)。这是佩克斯。尝试查看他们的文档,并反编译源代码,看看他们做了什么。你想要的是全局数据流分析(“赋值/副作用达到什么使用点”)[需要控制流分析作为前兆]和某种范围分析(“汇总值集可以达到一个点”)。计算数据流需要有完整的C#前端、本地控制和数据流分析,然后将这些答案拼接成全局数据流分析。范围分析要求您首先定义如何对可能值的集合进行编码;允许使用哪种规范系统?最简单的,只是一组值,往往会爆炸。中间范数方案类似于OP与常数的单一关系,例如“x<50”。任何此类有限方案的问题在于,值集的丰富性可能会导致您得到无用的答案,特别是如果还有其他感兴趣的谓词(如果x始终为奇数,单个关系常数只能模拟这一点,因为“x以上就是C#学习教程的全部内容:C#静态分析,变量/参数的可能取值。代表立场,如涉及侵权,请点击右边联系管理员删除。如果您转载请注明出处:
