有没有一种方法可以将行号重新引入到堆栈跟踪中?

时间:2019-06-18 04:29:34

标签: javascript error-handling stack-trace

我正在使用通过直接抛出对象来掩盖错误的库,我相信。

//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();

Code Sandbox

输出:

[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()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

0 个答案:

没有答案