【发布时间】:2019-11-11 17:28:25
【问题描述】:
这是我的test.cpp 程序。它通过assert(0)异常退出。
#include <cassert>
int main() {
assert(0);
}
当我直接运行这个程序时,我得到了预期的输出,包括非零退出状态:
$ ./test
...
$ echo $?
134
但是当我尝试检测tcl/expect 中的异常退出时,我似乎无法:
#!/usr/bin/expect
spawn ./test
expect eof
lassign [wait] pid spawnid os_error_flag value
if {$os_error_flag != 0} {
puts "OS error"
exit 1
}
if {$value != 0} {
puts "Application error"
exit 1
}
puts "No error"
当我运行该脚本时:
$ ./test.expect
No error
如果我使用exit(1) 而不是assert(0) 那么tcl 脚本能够检测到异常退出。为什么tcl/expect不提供断言失败的OS-或application-returned错误代码,如何通过检查退出代码统一检测所有异常程序退出?
【问题讨论】: