2015-12-12 60 views
0

我正在编写一个命令行工具haxe(一个微型lisp计算器:D)在这个时间点在项目中,我无法阻止用户对非存在函数进行无效调用或使用错误参数(它需要额外的包装),所以我尽管采用pythonic方法:让它崩溃并捕获错误。然而,似乎我无法从haxe中捕捉到C++分段错误。hxcpp如何捕捉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中,这不是问题。

+0

我知道有一个相关的问题只适用于C++:http://stackoverflow.com/questions/2350489/how-to-catch-segmentation-fault-in-linux 但是我正在寻找一个haxe惯用解决方案(除了包装这个看起来不太便携的库)。 –

回答

0

不,没有办法捕捉并从分段故障中恢复。分段错误是一个硬错误:您的进程尝试访问无效内存,操作系统正在关闭该进程,因为它是。您必须避免分段错误。

+0

我认为有些操作系统可能会向程序发送一个信号(Linux中的'SIGSEGV')......但也许我错了,或者它不适用于所有平台。不过,我主要是在寻找惯用的haxe解决方案。 –

+0

@VíctorR.Escobar:是的,你可以使用信号处理程序,但真的[不](https://feepingcreature.github.io/handling.html) –