我想实现一个像 console.log 一样工作的 C++ 函数。我需要知道 javascript 调用者在 C++ 中的源代码行位置。我搜索 MDN JSAPI/JS Debugger API 文档但没有结果。
javascript中的一个概念用法。
console.log("blahblahblah");
以及 C++ 中的预期逻辑。
JSBool consoleLog(JSContext *cx, unsigned argc, jsval *vp) {
// expect to get caller info including filename, lineno.
// write "blahblahblah" and caller info in my log system.
return JS_TRUE;
}
===============
更新
我终于找到了一种获取文件名和 lineno 的方法。错误处理代码被省略。
#include "jsdbgapi.h"
JSBool consoleLog(JSContext *cx, unsigned argc, jsval *vp) {
JSScript *script;
unsigned int lineno;
JS_DescribeScriptedCaller(cx, &script, &lineno);
const char *filename = JS_GetScriptFilename(cx, script);
// use filename and lineno to write log...
return JS_TRUE;
}