Qoder Remote Control Sync(node.mojom.NodeService)反复异常退出并自动重启,形成崩溃循环:main.1.log 中相关记录 279 次main.log 中 16 次,集中在 11:10–11:11(UTC+8)systemctl --user stop 被吊住),仅 kill -9 可结束sharp-linux-x64.node(+0x1835d),调用链经 Node 线程池(ThreadPoolWork/uv_work)/var/lib/systemd/coredump/core.qoder-cn.1000.7de104dd....2199622.1793934686....zst(13M,保留可用)Stack trace of thread 2199699:
#0 0x0000000000000000 n/a
#1 0x00007f5a71ada35d n/a (sharp-linux-x64.node + 0x1835d)
#2 0x00007f5a71ae200c n/a (sharp-linux-x64.node + 0x2000c)
#3 0x00007f5a71ad8eac n/a (sharp-linux-x64.node + 0x16eac)
#4 node::ThreadPoolWork::ScheduleWork(...) [uv_work]
[2026-11-06T03:11:16.097Z] [ERROR] [main] [App] Electron child process exited
{"type":"Utility","reason":"crashed","exitCode":139,
"serviceName":"node.mojom.NodeService","name":"Qoder Remote Control Sync"}
# 同类记录每 2~5 秒一条,同时 Remote Control 历史同步 body_batch 持续进行
[2026-11-06T03:11:31.381Z] ← 最后一条日志,此后主进程静默 8h+
systemd 日志佐证(每 2~3 秒一次段错误):
11月 06 11:11:16 fedora systemd-coredump[...]: Process 2198631 (qoder-cn) terminated
abnormally with signal 11/SEGV
11月 06 11:11:19 fedora systemd-coredump[...]: Process 2198872 (qoder-cn) ...
(连续多条)
~/.config/com.qodercn.app.stable/logs/20261105-150951.663-2144850-6e36e84f/(含 main.log / main.1.log / renderer.log)
远程连接一台含有大体量历史会话(本次同步了 16+ 批、800+ 条消息且含图片)的桌面端,观察 Remote Control Sync 是否段错误并复现主进程假死。
升级:qoder-cn-0.5.6-1.x86_64(官方 rpm,SHA256 校验通过)——问题未修复,同样失败。
清空镜像库后的连锁发现(0.5.5 与 0.5.6 行为一致):
remote-control.sqlite 移走后,数据库准备流程在 handoff 阶段报 ENOENT——该流程不会从零创建库文件,只认已有文件failure_stage:"import",有 child_pid 但无任何日志/信号记录),cause 仍为 REMOTE_CONTROL_SCOPE_DATABASE_UNAVAILABLE,REMOTE_CONTROL_STORAGE_REPAIR_FAILED 同样出现。修复流程同样无法工作basic_text 且 encryptionAvailable:false,此时拒绝保存凭据并清除已有条目,表现为"每次重启都掉登录"。以完整 GNOME 会话环境(含 XDG_CURRENT_DESKTOP=GNOME)启动则正常使用 gnome_libsecret临时缓解措施(供其他用户参考):
remote-control.sqlite{,-shm,-wal}.bak-20261106-231930(清空后崩溃循环停止)kill -9 可结束;systemctl --user stop 会被吊死coredump 保留:/var/lib/systemd/coredump/(SIGILL 样本 3 份 + 早期 SIGSEGV 样本),日志目录 ~/.config/com.qodercn.app.stable/logs/(20261105-150951 系列为故障全程记录)。
一句话:App 自带的 @img/sharp-libvips-linux-x64 把 glib 2.86.1 静态内嵌在 libvips-cpp.so.8.17.3 里,而 Fedora 44 系统 glib 是 2.88.0;Electron 进程在加载 sharp 之前已经全局加载了系统 libgobject-2.0.so.0,于是 sharp-linux-x64.node 中未加符号版本的 g_object_unref 绑定到了系统 2.88 实现,被用来释放由 libvips 内置 2.86 glib 创建的 GObject → 两版 GObject 结构布局不一致 → 取到空的类方法指针并调用 → PC=0x0 SIGSEGV。任何一次图像处理必然崩溃,与会话内容、数据库、登录态无关。
ELECTRON_RUN_AS_NODE=1 ELECTRON_NO_ASAR=1 /opt/Qoder-CN/qoder-cn -e \
"require('.../node_modules/sharp')({create:{width:16,height:16,channels:3,background:'#123'}}).png().toBuffer()"
→ exit 139(resize / raw / metadata 全崩;DISABLE_SIMD、VIPS_CONCURRENCY=1、LD_PRELOAD 均无效)
#0 0x0000000000000000 in ?? ()
#1 0x7ffff79b656c in g_object_unref () from /lib64/libgobject-2.0.so.0 ← 系统 glib 2.88
#2 0x7fff6567035d in sharp-linux-x64.node (+0x1835d)
sharp-linux-x64.node:0x18358 处即 call 12280 <g_object_unref@plt>,0x1835d 是其返回地址——崩溃点在 glib 引用计数释放路径上。nm -D --defined-only libvips-cpp.so.8.17.3 → 自带 g_object_ref / g_object_unref(共 1778 个 g_* 符号),且 objdump -p 的 NEEDED 里没有 libgobject/libglib → glib 是静态内嵌的nm -D --undefined-only sharp-linux-x64.node → U g_object_ref / U g_object_unref(无版本约束)sharp.versions = vips 8.17.3, glib 2.86.1, sharp 0.34.5;rpm -q glib2 = glib2-2.88.0-1.fc44sharp-linux-x64.node 用的是 RPATH(非 RUNPATH),所以 LD_LIBRARY_PATH 无法替换 libvips;LD_PRELOAD 预载内嵌 libvips 会把第二套 glib 也带进全局作用域,引发另一种崩溃(g_slice 跨 glib 混用)libvips-cpp.so.8.17.3 用 python3 + ctypes 单独加载,vips_init 返回 0、建图/写 PNG 正常退出(exit 0,无段错误)→ libvips 本体没问题,问题只出现在"系统 glib 与内嵌 glib 混链"时。Qoder Remote Control Sync(node.mojom.NodeService)是唯一走 sharp 图像路径的子进程 → 只有它反复 139,每 ~2.2s 一轮(崩溃→重启→立刻再崩)历史同步阶段 stage:"body_batch",会话 9177eb55 的批次 13/14/17/18/19/20 均在途中崩断,attempt 以 complete:false, canceled 收尾 → 历史同步永不收敛,rc_history_sync.attempts 累到 1111.node 前用 RTLD_DEEPBIND/预绑定确保 g_object_unref 落在 libvips 自带实现上。ldd 全部干净、integrity_check 全部 ok,用户侧无法通过删库/清缓存绕过——只能等打包修正;因此本机已改用 qoderclicn remote-control(该二进制 ldd 不含 libgobject,不会形成同一套混链)。
Qoder Remote Control Sync 入口 out/main/remoteControlProcess.js 内 0 次 出现 sharp;它 import"@qoder-ai/qoder-cn-agent-sdk"resources/app.asar.unpacked/node_modules/@qoder-ai/qoder-cn-agent-sdk/dist/_worker/qoder-worker-runtime.obf.mjs(runtime-info.json: version 1.1.79-hotfix.18,built 2026-11-05T15:39:18Z,copiedPackages 明确包含 @img/sharp-linux-x64 / @img/sharp-libvips-linux-x64)sharp(buf).metadata() → 超过 3932160 B 或 2000 px 就 .resize(g,c,{fit:"inside",withoutEnlargement:true}) → .png({compressionLevel:9,palette:true,colors:64}) 或按 quality [80,60,40,20] 逐级降质 .jpeg() → .toBuffer();失败回退再 .resize(400,400).jpeg({quality:20})。日志串 Image resize: WxH → WxH、Fallback compression failed~/.qoder-cn/projects/-run-user-1000-gvfs-smb-share-server-ds920plus-local-share-homes-gomain-Drive-Forex/9177eb55-d0ed-4e96-a095-9600842e668f.jsonl(26 MB,110 个 type:"image" 块,去重后 55 个 PNG 对象)docs/路二体检_2026-11-02/route3_*.png(conditional / filters / full_census / parent_phase / period_map / phase_universal / straddle_dist / straddle_m15 / unbiased)、路三规律表/law_map.png、路三相位_汇总/route3_2x2.png|role_flip.png、路四战术/seq_round5.png,以及 /tmp/pb.png|pb2.png|pb5.png|um.png|wc.png;上传时间 2026-11-02 12:35 → 11-04 16:19,落到 qoder-cn-vl-private.oss-cn-beijing.aliyuncs.com/cloud/.../*.pngMETA 1200x780 png 之前的第一个原生调用即崩溃 → exit 139(同一路径的图像操作全部必崩,与图片本身内容无关)| 路线 | 实测结果 |
|---|---|
换成动态链接系统 glib 的 libvips(dnf 侧 vips-8.18.0-6.fc44,即 /usr/lib64/libvips-cpp.so.42) | 段错误消失但功能全废:metadata 可用(META 1200x780 png),jpeg / png / png(palette) / raw / webp 一律 colourspace: parameter space not set(value "32" of type 'gint' is invalid for property 'space' of type 'VipsInterpretation')。8.18 改了 VipsInterpretation 取值,sharp 0.34.5 是按 8.17.3 编译的 → 该路线需同时升级 sharp,用户侧不可行 |
LD_PRELOAD 转发 shim(把 sharp 发出的 g_object_ref/unref 转给 libvips 内嵌实现,其余照旧) | 单元级可把 139 变成 exit 0,但部署不了:以 LD_PRELOAD=/tmp/shim3.so 重启 App 后,Electron 的 zygote / utility 子进程 /proc/<pid>/environ 中 LD_PRELOAD 命中数 0/11(只有 Node child_process 起的 qoderclicn 继承到)→ Chromium 对子进程环境做了净化,唯一会崩的进程恰好收不到 |
升级内嵌包 @img/sharp-libvips-linux-x64@1.3.4(glib 2.90.0 / vips 8.18.7) | 仍 exit 139(静态内嵌 glib 与系统 2.88 并存这一事实没变,换版本号不换链接方式就没用) |
结论:本机无 root、无源码不可修;请打包侧按上面第 1 条建议出包(libvips 动态链接系统 glib 且 sharp 升到与该 libvips 匹配的版本),或对远程控制图像路径做进程隔离 + 退避。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这份Bug报告写得相当扎实,根因定位到sharp内嵌glib 2.86与Fedora 44系统glib 2.88的ABI冲突,证据链完整,连三条自修路线都实测否决了,开发团队拿到基本可以直接出补丁。
核心问题就两个:一是打包时libvips静态链接了旧版glib,遇到新系统必崩;二是子进程崩溃没退避机制,2秒一轮无限重启把主进程拖死。建议优先让libvips动态链接系统glib并升级sharp版本匹配,同时给Remote Control Sync加崩溃退避和任务隔离,别让单个utility进程搞垮整个App。
另外凭据存储在非GNOME环境退化后清已有条目这个体验问题也顺手修下,掉登录挺烦人的。
Qoder CN 是 Qoder CN 系列中面向软件开发场景的核心子产品(原“通义灵码”),提供 IDE、JetBrains 插件、Visual Studio Code 插件等多种使用形态。Qoder CN 持续提供代码智能生成、智能问答、多文件修改、编程智能体等能力,并在模型选择、专家协作、任务规划等方向全面升级,为开发者带来高效、流畅的编码体验。同时面向企业客户提供企业标准版、企业专属版,具备企业级场景自定义、私域知识增强等能力,助力企业研发智能化升级。