Frame-onStep-async-gc-01.js (579B)
1 // An onStep handler on a suspended async function frame keeps a Debugger alive. 2 3 let g = newGlobal({newCompartment: true}); 4 g.eval(` 5 async function f() { 6 debugger; 7 await Promise.resolve(0); 8 return 'ok'; 9 } 10 `); 11 12 let dbg = Debugger(g); 13 let hit = false; 14 dbg.onDebuggerStatement = frame => { 15 frame.onPop = completion => { 16 frame.onStep = () => { hit = true; }; 17 frame.onPop = undefined; 18 }; 19 dbg.onDebuggerStatement = undefined; 20 dbg = null; 21 }; 22 23 g.f(); 24 assertEq(dbg, null); 25 gc(); 26 assertEq(hit, false); 27 drainJobQueue(); 28 assertEq(hit, true);