如何抑制Chrome扩展DevTools调试时的Readers死锁异常
问题说明
该报错是Chrome DevTools内置渲染调度模块的超时检测误报:当DevTools窗口处于后台被浏览器资源节流时,渲染任务调度延迟超过1500ms就会抛出该异常,和自定义DevTools面板的业务代码无关,即使不对面板做任何操作,只要DevTools被切到后台一段时间就可能触发。
不需要修改Chrome内置的render_coordinator.js文件,通过以下任意一种方案即可抑制异常触发的调试暂停:
可行解决方案
- 配置调试断点忽略规则
打开用于调试自定义面板的第二层DevTools窗口,在Sources面板找到异常暂停配置:- 可以直接取消勾选Pause on uncaught exceptions选项,避免未捕获的内置异常打断调试
- 更推荐在断点忽略列表中添加
devtools://devtools/bundled/devtools-frontend/路径匹配规则,所有DevTools内置脚本抛出的异常都不会触发暂停,完全不影响自定义扩展脚本的断点调试逻辑。
- 启动Chrome时关闭后台节流(仅本地调试使用)
给Chrome快捷方式追加启动参数,避免后台页面被调度降频:
加参数启动后,后台运行的DevTools页面不会被浏览器限制资源调度,自然不会触发渲染超时检测。注意该参数仅在调试扩展时使用,日常浏览网页不要开启,会额外增加内存和CPU占用。--disable-background-timer-throttling --disable-renderer-backgrounding - 升级Chrome版本
Chrome 118之后的稳定版本已经调整了该超时检测的判定逻辑,针对后台页面的场景提高了延迟阈值,不会再高频抛出这个无意义的死锁误报,旧版本DevTools才会频繁触发该问题。 - 调试时保持DevTools窗口前台可见
如果不想修改任何配置,调试过程中不要把两层DevTools窗口最小化,不要长时间切走让DevTools完全处于后台闲置状态,也可以避免触发该超时异常。
典型异常输出:
Exception: Error: Readers took over 1500ms. Possible deadlock? at devtools://devtools/bundled/devtools-frontend/front_end/ui/components/render_coordinator/render_coordinator.js:1:2388
内容的提问来源于stack exchange,提问作者Kostiantyn Ivashchenko
相关产品推荐
相关产品推荐

