Firefox调试器在数组存储函数报错时暂停位置错误,如何解决?
Firefox调试器在数组存储函数抛出异常时的暂停位置问题
问题描述
运行以下代码:
const myFunctions = []; function callMyFunctions(v) { for(let func of myFunctions) { func(v); } } myFunctions.push((v) => { console.log("Foo", v); throw "Error!"; }); callMyFunctions(123);
在Firefox开发者工具中勾选“Pause on exceptions”选项后,调试器会暂停在func(v)行,而非抛出错误的throw "Error!"行。继续执行后,控制台回溯信息能指向正确位置,但调试时无法直接在错误发生处暂停,影响调试效率。
而如果不将函数存储在数组中,调试器能正常在错误行暂停:
let myFunction = null; function callMyFunction(v) { myFunction(v); } myFunction = (v) => { console.log("Foo", v); throw "Error!"; } callMyFunction(123);
请问有没有办法让Firefox调试器在数组存储的函数抛出异常时,直接暂停在错误发生的位置?
解决方法
勾选“Pause on caught exceptions”选项:
默认的“Pause on exceptions”仅针对未捕获的异常,数组遍历调用函数时可能存在隐式的捕获逻辑。勾选该选项旁边的“Pause on caught exceptions”复选框,调试器会在异常抛出的第一时间暂停,无论是否被捕获。手动添加
debugger语句:
在抛出异常的函数内插入debugger;,强制调试器在指定位置暂停,适合临时调试场景:myFunctions.push((v) => { console.log("Foo", v); debugger; throw "Error!"; });检查调试器黑盒设置:
确认包含数组遍历逻辑的代码文件未被加入调试器的“Blackboxing”列表。若被黑盒,调试器会跳过内部细节直接停在调用处,可右键点击代码文件选择“Blackbox script”取消黑盒。
内容的提问来源于stack exchange,提问作者EKW
相关产品推荐
相关产品推荐

