使用堆栈跟踪获取节点中的函数调用文件给我错误的文件路径

问题描述

所以,我有 2 个文件a.jsb.js

a.js 中,我有一个 test(); 函数,我正在从 b.js 调用

我还有以下代码可以帮助我找到 b.js 的哪一行正在调用函数,并且工作正常。但我也想得到文件名,下面的代码给了我 a.js 而不是 b.js.. 任何指针?

Object.defineProperty(global,"__stack",{
    get() {
        const orig = Error.prepareStackTrace;
        Error.prepareStackTrace = function(_,stack) {
            return stack;
        };
        const err = new Error;
        Error.captureStackTrace(err,arguments.callee);
        const stack = err.stack;
        Error.prepareStackTrace = orig;
        return stack;
    },});

Object.defineProperty(global,"__line",{
    get() {
        return __stack[1].getLineNumber();
    },"__filename",{
    get() {
        return __stack[1].getFileName();
    },});

解决方法

好吧,我不知道为什么,但是

Object.defineProperty(global,"__filename",{
    get() {
        return __stack[1].getFileName();
    },});

提供的部分代码没有按预期工作。不知道它在做什么,我所知道的是我尝试了以下操作并且工作正常。

Object.defineProperty(global,"__callerInfo",{
    get() {
        return [__stack[1].getLineNumber(),__stack[1].getFileName()];
    },});

我只是将行号保存在一个常量中,将文件名保存在另一个常量中