Tests for break on exception and stepping.

Running test: testStepThrougA

function a() { #n(); };
function b() { c(); };


Running test: testStepThrougB
function a() { n(); };
function b() { #c(); };
function c() { n(); };

function b() { c(); };
function c() { #n(); };
function d() { x = 1; try { e(); } catch(x) { x = 2; } };


Running test: testStepThrougD
function c() { n(); };
function d() { #x = 1; try { e(); } catch(x) { x = 2; } };
function e() { n(); };

function c() { n(); };
function d() { x = 1; try { #e(); } catch(x) { x = 2; } };
function e() { n(); };

function d() { x = 1; try { e(); } catch(x) { x = 2; } };
function e() { #n(); };
function f() { x = 1; try { g(); } catch(x) { x = 2; } };

function c() { n(); };
function d() { x = 1; try { e(); } catch(x) { #x = 2; } };
function e() { n(); };

function c() { n(); };
function d() { x = 1; try { e(); } catch(x) { x = 2; } #};
function e() { n(); };


Running test: testStepThrougDWithBreakOnAllExceptions
function c() { n(); };
function d() { #x = 1; try { e(); } catch(x) { x = 2; } };
function e() { n(); };

function c() { n(); };
function d() { x = 1; try { #e(); } catch(x) { x = 2; } };
function e() { n(); };

function d() { x = 1; try { e(); } catch(x) { x = 2; } };
function e() { #n(); };
function f() { x = 1; try { g(); } catch(x) { x = 2; } };

paused on exception:
{
    className : ReferenceError
    description : ReferenceError: n is not defined     at e (<anonymous>:6:16)     at d (<anonymous>:5:29)     at expr.js:1:1
    objectId : <objectId>
    subtype : error
    type : object
    uncaught : false
}
function d() { x = 1; try { e(); } catch(x) { x = 2; } };
function e() { #n(); };
function f() { x = 1; try { g(); } catch(x) { x = 2; } };

function c() { n(); };
function d() { x = 1; try { e(); } catch(x) { #x = 2; } };
function e() { n(); };

function c() { n(); };
function d() { x = 1; try { e(); } catch(x) { x = 2; } #};
function e() { n(); };


Running test: testStepThrougF
function e() { n(); };
function f() { #x = 1; try { g(); } catch(x) { x = 2; } };
function g() { h(); };

function e() { n(); };
function f() { x = 1; try { #g(); } catch(x) { x = 2; } };
function g() { h(); };

function f() { x = 1; try { g(); } catch(x) { x = 2; } };
function g() { #h(); };
function h() { x = 1; throw 1; };

function g() { h(); };
function h() { #x = 1; throw 1; };


function g() { h(); };
function h() { x = 1; #throw 1; };


function e() { n(); };
function f() { x = 1; try { g(); } catch(x) { #x = 2; } };
function g() { h(); };

function e() { n(); };
function f() { x = 1; try { g(); } catch(x) { x = 2; } #};
function g() { h(); };


Running test: testStepThrougFWithBreakOnAllExceptions
function e() { n(); };
function f() { #x = 1; try { g(); } catch(x) { x = 2; } };
function g() { h(); };

function e() { n(); };
function f() { x = 1; try { #g(); } catch(x) { x = 2; } };
function g() { h(); };

function f() { x = 1; try { g(); } catch(x) { x = 2; } };
function g() { #h(); };
function h() { x = 1; throw 1; };

function g() { h(); };
function h() { #x = 1; throw 1; };


function g() { h(); };
function h() { x = 1; #throw 1; };


paused on exception:
{
    description : 1
    type : number
    uncaught : false
    value : 1
}
function g() { h(); };
function h() { x = 1; #throw 1; };


function e() { n(); };
function f() { x = 1; try { g(); } catch(x) { #x = 2; } };
function g() { h(); };

function e() { n(); };
function f() { x = 1; try { g(); } catch(x) { x = 2; } #};
function g() { h(); };

