1

在项目的这个时间点,我正在用 haxe(一个迷你 lisp 计算器:D)编写一个命令行工具,我无法阻止用户对不存在的函数进行无效调用或使用错误的参数(它需要额外的包装器) ,所以我虽然采用了pythonic方法:让它崩溃并捕获错误。但是,我似乎无法以任何方式从 haxe 捕获 C++ 分段错误。

例子:

hxlisp => (+ 1 2)
REPL.hx:33: Null Function Pointer
hxlisp => (hello)
make: *** [cpp] Segmentation fault: 11

代码看起来如何?

public function loop() {
    while (true) {
        try {
            var inp:String = this.input();
            if (inp.length == 0) continue;
            var tree:SExpr = mkSexpr(parse(inp));
            var a = SExpr.List(sexpr_values(tree)[0]);
            var program = eval(a, env.std_env);
            this.output(program);
        } catch(eof:Eof) {
            break;
        } catch(error:Dynamic) {
            trace(error);
        }
    }
}

然而,似乎没有办法(或者我找不到它)将错误作为异常捕获并从中恢复。有没有人知道这种让它崩溃并从 HaxeC++ 中的错误中恢复的方法有多大可能?请注意,在 Neko 或 javascript 中这不是问题。

4

1 回答 1

-1

不,没有办法捕获分段错误并从分段错误中恢复。分段错误是一个硬错误:您的进程已尝试访问无效内存并且操作系统因此而关闭该进程。您必须避免分段错误。

于 2015-12-12T12:40:43.750 回答