簡體   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