如何在V8中解除error.stack?

时间:2017-01-11 16:46:03

标签: node.js v8

似乎在第一次使用Error.prepareStackTrace后,error.stack的输出被缓存:

try {
  null();
} catch (error) {
  Error.prepareStackTrace = () => {
    return 'Hello, World!';
  };

  console.log('#0', error.stack);

  Error.prepareStackTrace = () => {
    return 'Hello, Stack Trace!';
  };

  console.log('#1', error.stack);
}

当前输出:

#0 Hello, World!
#1 Hello, World!

预期产出:

#0 Hello, World!
#1 Hello, Stack Trace!

如何解除error.stack值,以便进一步使用Error. prepareStackTrace?如果没有这个,我无法保证当我有error的实例时,其他人还没有转储堆栈。

1 个答案:

答案 0 :(得分:1)

这个怎么样:

var getStackTrace;

Error.prepareStackTrace = () => {
  return { toString: () => getStackTrace() };
};

var exception;
try {
  null();
} catch (e) {
  exception = e;
}

getStackTrace = () => "Hello World.";
console.log(exception.stack);
getStackTrace = () => "Hello Stack Trace.";
console.log(exception.stack);