【问题标题】:try-catch in JavaScript : how to get stack trace or line number of the original errorJavaScript 中的 try-catch:如何获取原始错误的堆栈跟踪或行号
【发布时间】:2012-06-11 22:04:18
【问题描述】:

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

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

但是,有些浏览器没有“e.stack”。 iPhone 的 safari 就是一个例子。

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

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 上运行,但在 iPhone 上仍然不可用,最新的 iOS 版本

【问题讨论】:

  • 为什么不直接删除try...catch 看看标准错误信息指向哪一行?
  • @robertc 我需要 try...catch 其他原因。比如我想捕获错误发生时的状态
  • 你现在在 iPhone 上收到了吗?您正在寻找更多信息以追踪错误,有一种方法可以获得比目前更多的信息,您为什么不想利用它?
  • @robertc 例如 - 我想在错误发生时准确地捕获所有函数变量中的当前值。据我所知,我只能在捕捉中做到这一点。我知道我可以省略 try ... catch all together,并使用 window.onerror 给我行号,但这还不够而且它也不是在所有浏览器中都可用
  • 谢谢你,但是:“你也可以传入你自己的错误来获取不在 IE 或 Safari 中的堆栈跟踪,但是:(”这正是我的情况 :)

标签: javascript ios mobile


【解决方案1】:

尝试使用e.lineNumber。 例如:

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

【讨论】:

【解决方案2】:
try {
   0();
} catch (e) {
   alert(e.line);
}

在 try...catch 块中使用 'e.line' 将给出 Mobile Safari 中错误的行号。

【讨论】:

  • 嗨。我在这方面的专业知识为零,但是您的帖子出现在审核队列中。主要是因为它只是代码,没有任何解释。添加一些关于您更改的内容以及它解决问题的原因的解释总是一个好主意。不要忘记大量新手(或不熟悉您的专业领域的人)在 S/O 上,他们可以从您那里学到一两件事……但前提是您告诉他们 :) 对您来说可能是显而易见的对他们来说没那么重要。
  • 不是纯代码的,后面有说明。稍微扩展一下:在 try...catch 块中使用 'e.line' 将给出 Mobile Safari 中错误的行号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2019-03-05
  • 2014-08-20
  • 2013-04-18
相关资源
最近更新 更多