JavaScript 异常处理 - 显示行号
Posted
技术标签:
【中文标题】JavaScript 异常处理 - 显示行号【英文标题】:JavaScript exception handling - displaying the line number 【发布时间】:2010-12-26 10:32:49 【问题描述】:在 javascript 中捕获/处理异常时,如何确定异常发生时的调用堆栈是什么? (如果可能的话,行号是什么)
try
// etc...
catch (ex)
// At this point here I want to be able to print out a detailed exception
// message, complete with call stack, and if possible line numbers.
【问题讨论】:
【参考方案1】:对于大多数个错误,您可以检查堆栈跟踪,其中将包括错误位置的行号和列号:
try
throw new Error('foo');
catch(e)
console.log(e.message);
console.log(e.stack);
const [, lineno, colno] = e.stack.match(/(\d+):(\d+)/);
console.log('Line:', lineno);
console.log('Column:', colno);
第 13 行是正确的,因为那是 html 中来自 stacksn-ps.net 的响应中的错误所在的行:
请注意,这不适用于抛出的非错误,例如 throw null
或 throw 'foo'
(不推荐正是出于这个原因)。
【讨论】:
【参考方案2】:我发现在 IE 下运行的 JavaScript 中,无法在捕获异常时捕获堆栈跟踪。根据thisPDF,在 IE 中获取堆栈跟踪的唯一方法是不处理异常。
【讨论】:
【参考方案3】:看看this。
一种分析可用信息的方法:
try
doInit();
catch(err)
var vDebug = "";
for (var prop in err)
vDebug += "property: "+ prop+ " value: ["+ err[prop]+ "]\n";
vDebug += "toString(): " + " value: [" + err.toString() + "]";
status.rawValue = vDebug;
【讨论】:
请注意 - 如果您使用的是节点服务器端,这非常有效。已投票 - 感谢您的发帖!【参考方案4】:每个浏览器对此的处理方式不同,因此没有通用的方法。 This blog post 有一些很好的代码可以为大多数受支持的浏览器转储堆栈跟踪。我认为没有提供行号的好方法。
如果您特别想调试一个函数,Firebug 有一个很好的堆栈跟踪函数(vis console.trace())。
【讨论】:
那个博客已经很老了(2008 年)。一定有更好的方法。以上是关于JavaScript 异常处理 - 显示行号的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )