views:

691

answers:

3

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, and if possible line numbers.
}
+3  A: 

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

Chris Clark
Of course, FireBug!
Upper Stage
+1  A: 

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; 
}
jldupont
A: 

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.

Kragen