【问题标题】:hxcpp how to catch a C++ segmentation fault?hxcpp 如何捕获 C++ 分段错误?
【发布时间】:2015-12-12 12:30:49
【问题描述】:

在项目的这个时间点,我正在用 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 中这不是问题。

【问题讨论】:

  • 我知道有一个仅适用于 C++ 的相关问题:stackoverflow.com/questions/2350489/… 但是我正在寻找一个惯用的解决方案(除了包装这个看起来不太便携的库)。

标签: c++ exception haxe hxcpp


【解决方案1】:

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

【讨论】:

  • 我认为某些操作系统可能会向程序发送信号(Linux 中的SIGSEGV)......但也许我错了,或者它不适用于所有平台。不过,我主要是在寻找惯用的 haxe 解决方案。
  • @VíctorR.Escobar:是的,你可以使用信号处理程序,但真的是don't
猜你喜欢
  • 2012-10-10
  • 2014-10-30
  • 2010-10-07
  • 1970-01-01
  • 2019-04-02
  • 2023-03-18
  • 2021-11-15
  • 2010-10-05
  • 2018-07-13
相关资源
最近更新 更多