我想在 duktape 的致命处理程序中打印函数调用堆栈:
void duktape_fatal(void *d, const char *m)
{
int line, pc, level;
const char *fnName = NULL;
printf("JSE fatal: %s!\n", (m ? m : ""));
level = -1;
while (1)
{
duk_inspect_callstack_entry(ctx, level);
if (duk_is_undefined(ctx, -1))
{
duk_pop(ctx);
break;
}
duk_get_prop_string(ctx, -1, "function");
fnName = duk_to_string(ctx, -1);
duk_pop(ctx);
duk_get_prop_string(ctx, -1, "lineNumber");
line = duk_to_int(ctx, -1);
duk_pop(ctx);
duk_get_prop_string(ctx, -3, "pc");
pc = duk_to_int(ctx, -1);
duk_pop(ctx);
duk_pop(ctx);
printf("Trace %i,%i: %s\n", pc, line, fnName);
level--;
}
while (1)
{
;
}
}
这是一个触发致命错误的示例 JS 脚本:
function test3() {
var b = 1;
print(a);
}
function test2() {
test3();
}
function test() {
test2();
}
test();
在此示例中,致命函数将仅打印故障 lineNumber,但不打印调用堆栈。任何帮助表示赞赏。