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 例外使 'test' 函式停止并且 no ok, no failed, noret列印出來。如何捕獲由 JS 拋出的例外JSON.parse?
這里有 1 個問題,但它仍然開放:https ://github.com/emscripten-core/emscripten/issues/11496
uj5u.com熱心網友回復:
基于檔案:
默認情況下,Emscripten中禁用例外捕獲。
您必須使用引數啟用它-fexceptions。
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426268.html
標籤:javascript C 例外 试着抓 授权
上一篇:在回圈頭中捕獲例外但不在回圈體中
