You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:30:37