Skip to content Skip to sidebar Skip to footer

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 {

Solution 1:

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()).


Solution 2:

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

Solution 3:

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.


Solution 4:

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:

enter image description here

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


Post a Comment for "JavaScript Exception Handling - Displaying The Line Number"