TCL中是否有任何机制可以检查TCL脚本是否进入无限循环?
例如, 我有Test.tcl我想检查我的a.tcl是否进入无限循环?如果我的a.tcl进入无限循环,是否可以调用某个函数“你的a.tcl进入无限循环。”
计时器的种类在c。
中起作用希望我很清楚。
由于
答案 0 :(得分:2)
查看允许类似内容的interp limit
函数。
检测无限循环有点像halting problem
所以,你只能设置一个你想等待的超时,但是在一般情况下确实没有真正检测到是否存在无限循环。
在某些特殊情况下,如果您尝试创建无限循环,Tcl会发出警告,尤其是在没有注册事件源时尝试启动事件循环(通过vwait forever
)。
对于interp limit
,请参阅以下文档:
http://www.tcl.tk/man/tcl/TclCmd/interp.htm#M22
它有一个例子,用于在执行一定数量的命令后终止子解释器中的无限循环。
set i [interp create]
interp limit $i command -value 1000
interp eval $i {
set x 0
while {1} {
puts "Counting up... [incr x]"
}
}
您还可以限制执行所允许的时间。
set i [interp create]
# set a limit to now + 1 seconds
interp limit $i time -seconds [expr {[clock seconds] + 1}]
interp eval $i {
set x 0
while {1} {
puts "Counting up... [incr x]"
}
}