Есть ли способ повторно ввести номера строк в трассировку стека? - PullRequest
2 голосов
/ 18 июня 2019

Я работаю с библиотекой, которая скрывает ошибки, бросая объект напрямую - я полагаю.

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

Код Песочница

Выход:

[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
...