有没有办法将行号重新引入堆栈跟踪?

2024-01-19

我正在使用一个库,它通过直接抛出一个对象来混淆错误 - 我相信。

//Functions a,b, b2, c are all in a library that I don't have control over.
function a() {
  console.log("a");
}

function b() {
  throw new Error("You can see my stacktrace!");
}

function b2() {
  throw "I could have come from anywhere!";
}

function c() {
  console.log("c");
}

//Our code here.
function all() {
  try {
    console.log("Start all()");
    a();
    b();
    c();
  } catch (err) {
    console.error(err);
  }
}

function all2() {
  try {
    console.log("Start all2()");
    a();
    b2();
    c();
  } catch (err) {
    console.error(err);
  }
}

all();
all2();

代码沙箱 https://codesandbox.io/s/trusting-cloud-7ru3f

Output:

[nodemon] starting `node src/index.js localhost 8080`
Start all()
a
Error: You can see my stacktrace!
    at b (/sandbox/src/index.js:7:9)
    at all (/sandbox/src/index.js:23:5)
    at Object.<anonymous> (/sandbox/src/index.js:41:1)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
Start all2()
a
I could have come from anywhere!
[nodemon] clean exit - waiting for changes before restart

问题是这让我很难调试我的代码 - 我不知道错误是否来自函数a(), b(), or c().

有没有一种简洁的方法来重新引入堆栈跟踪?

到目前为止我得到的最好的选择是这样的:

function wrapAndRunFunction(fn) {
  try {
    fn();
  } catch (err) {
    throw new Error(err);
  }
}

function all3() {
  try {
    console.log("Start all3()");
    wrapAndRunFunction(a);
    wrapAndRunFunction(b2);
    wrapAndRunFunction(c);
  } catch (err) {
    console.error(err);
  }
}
Start all3()
a
Error: I could have come from anywhere!
    at wrapAndRunFunction (/sandbox/src/index.js:45:11)
    at all3 (/sandbox/src/index.js:53:5)
    at Object.<anonymous> (/sandbox/src/index.js:62:1)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
[nodemon] clean exit - waiting for changes before restart

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将行号重新引入堆栈跟踪? 的相关文章

随机推荐