JavaScript 中的 try-catch:如何获取原始错误的堆栈跟踪或行号

try-catch in JavaScript : how to get stack trace or line number of the original error

本文关键字:错误 原始 堆栈 跟踪 获取 try-catch 中的 何获取 JavaScript      更新时间:2023-09-26

在JavaScript中使用TRY-CATCH时,如何获取导致错误的行的行号?

在许多浏览器上,下面的代码会很好用,我将获得指向引发异常的实际行的堆栈跟踪。

但是,某些浏览器没有"e.stack"。iPhone的野生动物园就是一个例子。

有没有办法获取适用于所有浏览器的行号?

try
{
   // lots of code here
   var i = v.WillGenerateError; // how to get this line number in catch??
   // lots of code here
} 
catch (e) 
{
     alert (e.stack)  // this will work on chrome, FF. will no not work on safari 
     alert (e.line)  // this will work on safari but not on IPhone
}

非常感谢!

更新:我发现e.line可以在Safari上运行,但在最新的iOS版本iPhone上仍然不可用

尝试使用 e.lineNumber .例如:

try {
   var i = v.WillGenerateError;
} catch (e) {
   alert(e.lineNumber);
}

与所有浏览器完全兼容

var aux = err.stack.split("'n");
aux.splice(0, 2); //removing the line that we force to generate the error (var err = new Error();) from the message
aux = aux.join(''n"');
throw message + ' 'n' + aux;

错误:myError at :4:11 at Object.InjectedScript._evaluateOn(:777:140).在Object.InjectedScript._evaluateAndWrap(:710:34)。在Object.InjectedScript.evaluate (:626:21).

try {
   0();
} catch (e) {
   alert(e.line);
}

在尝试中使用"e.line"...catch 块将在移动 Safari 中给出错误的行号。