问题描述
|
是否有可能通过读取给定方法的字节码来确定所有可能的执行路径,或者这等同于尝试解决暂停问题?如果无法解决停机问题,那么我可以进行静态分析多远而又不尝试解决停机问题?
相关问题:“在给定的二进制文件中查找所有代码等效于停止问题。”真?
解决方法
是的,这很容易解决停止问题。考虑以下if语句:
如果(TuringMachine(x))则转到fred;
好吧,真的有可能去弗雷德吗?如果您可以分析图灵机,则只能回答此问题。
这有一组等效的字节码。
现在,如果唯一的问题是确定所有可能的路径,并且您不在乎是否得到一些误报,答案是否定的。请考虑以下程序:
if (false) then x else y ;
可能的路径:eval(false); do x和eval(false); do y是完整的枚举。
您必须将循环特别地视为零,一,二或某个最大有界迭代次数,因此您需要一个可计算的答案。如果循环可以永远重复,那么您的某些路径将是无限长的,您将无法使用算法和有限的时间来报告它们:-{