开发者

JavaScript exception handling - displaying the line number

When catching / handling exceptions in JavaScript, how can I determine what the call stack was when the exception occurred? (and also if possible what the line number was)

try
{
    // etc...
}
catch (ex)
{
    // At this point here I want to be able to print out a detailed exception 
    // message, complete with call stack, an开发者_如何学编程d if possible line numbers.
}


Each browser handles this differently, so there isn't a universal way to do it. This blog post has some good code to dump a stack trace for most supported browsers. I don't think there is a good way to provide the line number.

If you're looking to debug one function in particular, Firebug has a good stack trace function (vis console.trace()).


Have a look at this.

A way to analyse the available information:

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; 
}


I've discovered that in JavaScript running under IE it is not possible to capture a stack trace at the point that an exception is caught. According to this PDF the only way of getting a stack trace in IE is if you don't handle the exception.


With most errors, you can examine the stack trace, which will include the line and column number of the error location:

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);
}

This line 13 is correct, because that is the line in the HTML where the error came from in the response from stacksnippets.net:

JavaScript exception handling - displaying the line number

Note that this will not work for non-errors thrown, like throw null or throw 'foo' (which are not recommended for precisely this reason).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜