Skip to content

Bug: macOS 后台一段时间后窗口黑屏 — JCEF 渲染进程 CrRendererMain SIGTRAP 崩溃(5.3.8) #2993

Open

Description

@hubert-yu

Chat2DB Edition

Chat2DB Local

Chat2DB Version

5.3.8(内部版本 5.3.899,build dc8c6039,2026-09-29 安装)

Deployment

Desktop

Operating System

macOS

Operating System Version

macOS 27.2(26B123),Apple Silicon(MacBookPro18,2)

Database and Version

不涉及具体数据库(任意数据源下均可复现)

Problem Summary

应用切到后台放置一段时间(实测约 1 小时)后,整个窗口变为黑屏;退出并重新打开应用才能恢复。根因是内嵌浏览器(JCEF / Chromium Embedded Framework)的渲染进程在后台期间崩溃,且应用没有自动恢复渲染进程。该问题每天可复现多次。

Steps to Reproduce

  1. 启动 Chat2DB Local,正常使用(打开数据源、执行 SQL 均可)
  2. 将应用切到后台(切到其他应用窗口),放置约 30–60 分钟
  3. 切回 Chat2DB → 窗口内容全黑,无任何 UI 响应

实测每天发生 1–2 次,触发条件稳定(后台放置一段时间)。

Expected Behavior

切回应用后界面正常显示;即使渲染进程意外崩溃,应用也应能检测并自动恢复(重新加载页面),而不是永久黑屏。

Actual Behavior

窗口全黑。排查证据如下:

1. 黑屏现场缺少渲染进程。 正常运行时应有 5 个进程(主进程 + Renderer + GPU + Network + Storage),黑屏后 ps 检查只剩 4 个,唯独缺少 --type=renderer 的 jcef Helper (Renderer) 进程。

2. 系统崩溃报告确认渲染进程崩溃。 ~/Library/Logs/DiagnosticReports/ 下发现多份 jcef Helper (Renderer)-*.ips,以 2026-11-02 为例当天有两份(10:14、11:23),时间点与黑屏完全吻合。关键信息(已脱敏):

app_name:   jcef Helper (Renderer)
bundleID:   org.jcef.jcef.helper.renderer
parentProc: Chat2DB Local
procRole:   Foreground
cpuType:    ARM-64
exception:  EXC_BREAKPOINT (0x0000000000000001), signal SIGTRAP
            崩溃线程: CrRendererMain(渲染器主线程)
termination:namespace SIGNAL, code 5, "Trace/BPT trap: 5"

SIGTRAP + EXC_BREAKPOINT 是 Chromium 内部 CHECK() 断言失败后主动触发的崩溃(不是系统因内存不足杀进程——后者会记录为 JETSAM/SIGKILL)。

3. 多次崩溃调用栈完全一致。 两份 .ips 的崩溃栈在 CEF 二进制内的偏移逐字节相同,说明是同一处确定性断言失败,而非随机内存问题。

4. 时间线吻合"后台一段时间后"。 渲染进程 10:27:50 随应用启动,11:23:26 崩溃——恰好在后台放置约 1 小时后。

Logs

本机 CEF 版本:Chromium Embedded Framework 122.1.9.0(即 Chromium 122,2024 年初的内核)。

崩溃栈(无符号的 CEF dylib,只能给出镜像内偏移;两份报告完全一致):

frame 0-2:  Chromium Embedded Framework + 62713092/62713116/62713144
frame 3:    Chromium Embedded Framework + 104840924
frame 4-5:  Chromium Embedded Framework + 4109944/4109836
faultingThread: 0 (CrRendererMain)

Screenshots or Additional Context

根因分析: 应用内嵌的 CEF 122 内核(2024 年初)运行在 macOS 27.2 上。窗口进入后台时 macOS 会启用 App Nap,Chromium 自身也会暂停合成、节流定时器;这个较老的内核在新系统的后台挂起/恢复路径上命中了断言崩溃。渲染进程死亡后,JCEF 侧没有处理 onRenderProcessTerminated 之类的回调来自动重建/重载,窗口失去绘制来源,表现为永久黑屏,只能重启应用。

建议修复方向:

  1. 升级捆绑的 JCEF / CEF 内核(当前 122 距今已近三年,新版 Chromium 对新 macOS 的后台挂起/恢复处理有大量修复)
  2. 作为兜底:监听渲染进程终止事件,自动 reload 页面或提示用户,避免永久黑屏

已尝试 defaults write com.chat2db.local NSAppSleepDisabled -bool YES 禁用 App Nap,观察中。

Impact

Blocks a core workflow

Workaround

A reliable workaround exists

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions