michael@0: // Turning debugger off global at a time. michael@0: michael@0: var g1 = newGlobal(); michael@0: var g2 = newGlobal(); michael@0: var g3 = newGlobal(); michael@0: michael@0: g1.eval("" + function f() { michael@0: var name = "f"; michael@0: g(); michael@0: return name; michael@0: }); michael@0: g2.eval("" + function g() { michael@0: var name = "g"; michael@0: h(); michael@0: return name; michael@0: }); michael@0: g3.eval("" + function h() { michael@0: var name = "h"; michael@0: toggle(); michael@0: return name; michael@0: }); michael@0: michael@0: g1.g = g2.g; michael@0: g2.h = g3.h; michael@0: michael@0: function name(f) { michael@0: return f.environment.getVariable("name"); michael@0: } michael@0: michael@0: var dbg = new Debugger; michael@0: g3.toggle = function () { michael@0: var frame; michael@0: michael@0: // Add all globals. michael@0: dbg.addDebuggee(g1); michael@0: dbg.addDebuggee(g3); michael@0: dbg.addDebuggee(g2); michael@0: michael@0: // Remove one at a time. michael@0: dbg.removeDebuggee(g3); michael@0: assertEq(name(dbg.getNewestFrame()), "g"); michael@0: dbg.removeDebuggee(g2); michael@0: assertEq(name(dbg.getNewestFrame()), "f"); michael@0: dbg.removeDebuggee(g1); michael@0: }; michael@0: michael@0: g1.eval("(" + function () { f(); } + ")();"); michael@0: