Chcę zaimplementować funkcję C++ działającą jak console.log. Muszę znać pozycję wiersza kodu źródłowego javascript w C++. Przeszukuję dokumenty interfejsu API MDN JSAPI/JS Debugger, ale bez rezultatu.Jak uzyskać numer linii źródłowej dzwoniącego javascript w wywołaniu zwrotnym JSNative SpiderMonkey?
Użycie pojęcia w javascript.
console.log("blahblahblah");
Oczekiwana logika w 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;
}
==============
UPDATE
I wreszcie znaleźć sposób, aby uzyskać nazwę pliku i lineno. Kod obsługi błędów został pominięty.
#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;
}
Dziękujemy za informacje. W końcu używam 'JS_DescribeScriptedCaller' i' JS_GetScriptFilename', aby uzyskać nazwę pliku skryptu i lineno. – huandu