Tôi muốn thực hiện một hàm C++ làm việc như console.log. Tôi cần biết vị trí dòng nguồn của người gọi javascript trong C++. Tôi tìm kiếm tài liệu API Debugger MDN JSAPI/JS nhưng không có kết quả.Làm thế nào để có được số lượng người gọi javascript nguồn trong SpiderMonkey JSNative gọi lại?
Sử dụng khái niệm trong javascript.
console.log("blahblahblah");
Và logic dự kiến trong 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;
}
==============
CẬP NHẬT
cuối cùng tôi đã tìm thấy một cách để làm cho tên tập tin và lineno. Mã lỗi xử lý bị bỏ qua.
#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;
}
Cảm ơn thông tin của bạn. Cuối cùng tôi sử dụng 'JS_DescribeScriptedCaller' và' JS_GetScriptFilename' để lấy tên tập lệnh và thành công của lineno. – huandu