【问题标题】:Is using static bytecode analysis to determine all the possible paths through a given method a variant of trying to solve the Halting Problem?使用静态字节码分析来确定通过给定方法的所有可能路径是尝试解决停机问题的变体吗?
【发布时间】:2011-08-05 06:18:44
【问题描述】:
【问题讨论】:
标签:
static-analysis
bytecode
cil
【解决方案1】:
是的,这很容易等同于解决停机问题。考虑以下 if 语句:
if (TuringMachine(x)) then goto fred;
好的,真的可以转到 fred 吗?只有能够分析图灵机,才能回答这个问题。
为此有一组等效的字节码。
现在,如果唯一的问题是确定所有似是而非的路径,并且您不在乎是否得到一些误报,那么答案是否定的。考虑以下程序:
if (false) then x else y ;
可能的路径:eval(false);do x 和 eval(false);do y 是一个完整的枚举。
您必须特别对待循环,将其视为零、一、二或某个最大有界迭代次数,您需要一个可计算的答案。如果一个循环可以永远重复,你的一些路径将无限长,你不能用算法和有限的时间来报告它们:-{