繁体   English   中英

Emscripten:如何捕获 JS 异常?

[英]Emscripten: How to catch JS exception?

Emscripten 'val.h' API 允许调用 JS 对象的方法,但是 C++ try-catch 不会捕获 JS 异常。 考虑这个例子:

#include <emscripten.h>
#include <emscripten/val.h>

void test(){
    string t = "some invalid json";
    val    v = val::object();

    // This C++ try-catch doesn't catch JS exception
    try {
        v = val::global("JSON").call<val>("parse", t);
        cout <<"ok" <<endl;
    }
    catch(...){
        cout <<"failed" <<endl;
    }

    cout <<"ret" <<endl;
}

JS 异常使“测试” function 停止并且没有ok ,没有failed ,没有ret打印出来。 如何捕捉JSON.parse抛出的 JS 异常?

这里有 1 个问题,但它仍然存在: https://github.com/emscripten-core/emscripten/issues/11496

基于文档

默认情况下,Emscripten 中禁用异常捕获。

您必须使用-fexceptions参数启用它

Emscripten 似乎还不能在 C++ 中捕获 JS 异常。 这是一个解决方法:

// extern_pre.js
function json_parse(str){
    try{
        return JSON.parse(str);
    }
    catch(E){
        return null;
    }
}
// app.cpp
...
val v = val::global("json_parse")(some_str);

建造:

emcc app.cpp -o app.js --bind --extern-pre-js extern_pre.js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM