weasel icon indicating copy to clipboard operation
weasel copied to clipboard

WeaselServer.exe 会随机自己崩溃,Exit code [3221225477],大概每天一次

Open ccyybn opened this issue 11 months ago • 12 comments

上报前请检查

  • [ * ] 我遇到的问题没有其他人在 issue 里提到过
  • [ ] 我的小狼毫版本于 rime/weasel 下载
  • [ * ] 我在使用小狼毫的最新发布版本,或最新发布版本后的 CI 构建

操作系统信息

  • Windows 11 23H2 22631.3007

描述遇到的问题 因为会崩溃,就写了个Windows服务监控 WeaselServer.exe,崩溃后调用 GetExitCodeProcess检查,得到 Exit code [3221225477]

复现步骤 重现问题的步骤,如:

  1. 几乎都发生在,英文模式下打字,就可能突然崩了,不怎么频繁,大概一天一次,重启服务后大概就正常了

用户文件 data.zip

ccyybn avatar Mar 02 '24 06:03 ccyybn

经过多次测试,是在我启动一个python脚本时,有很大概率崩溃,如果切换到 【windows的英文输入法】 启动脚本,WeaselServer.exe就不会崩溃,切换回 Weasel的英文模式,在控制台启动 python 脚本,Exit Code 不限于 [3221225477],包括

[1073807364] [2次] [3221226356] [5次] [3221225477] [12次]

python脚本包括同时 playwright 打开网页,读取本地大文件,大量运算,如果单独留下 playwright ,不运算,或者去掉 playwright ,只执行运算,WeaselServer.exe 好像都不容易崩溃

ccyybn avatar Mar 03 '24 08:03 ccyybn

能否考虑给 WeaselServer.exe 加个守护进程,崩溃后自动重新启动,我尝试在Windows服务里调用 CreateProcessAsUser,来启动WeaselServer.exe,不过它好像马上就死了,CreateProcessAsUser 启动 WeaselDeloyer.exe /dict 倒是可以成功看到窗口出现

ccyybn avatar Mar 03 '24 12:03 ccyybn

我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。

Techince avatar Mar 03 '24 14:03 Techince

我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。

好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗

ccyybn avatar Mar 03 '24 15:03 ccyybn

我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。

好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗

image 在WeaselTSF::_EnsureServerConnected里

Techince avatar Mar 03 '24 15:03 Techince

我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。

好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗

image 在WeaselTSF::_EnsureServerConnected里

这里好像有按键才会触发检测,我弄了个线程循环检查,不过TSF会在每个窗口都生成,导致我的线程也有好多个,不过还好多个线程重复启动 WeaselServer.exe 问题不大

ccyybn avatar Mar 04 '24 12:03 ccyybn

@ccyybn 是的。当你没有输入时,算法服务是否运行无关紧要。这个逻辑可确保输入不会中断。

Techince avatar Mar 04 '24 14:03 Techince

@ccyybn 是的。当你没有输入时,算法服务是否运行无关紧要。这个逻辑可确保输入不会中断。

有一点可以优化一下,重启服务后把 TSF当前的中英文状态,恢复到服务里,这样用户就完全没有感知了

不过一些方案自定义Option (简繁,emoji开关),就有点不方便,由于TSF里面并没有记录状态值,导致每项都要硬编码一下,才能同步到TSF里面

image

ccyybn avatar Mar 06 '24 15:03 ccyybn

可以看看nightly build,或者更新rime.dll到最新版测试看看情况

fxliang avatar Apr 16 '24 14:04 fxliang

可以看看nightly build,或者更新rime.dll到最新版测试看看情况

还是会崩,我觉得是 playwright 爬虫启动了网页,在网页里的输入框触发了输入法,然后不知怎么的输入法就崩了

不过现在我加了崩溃后重启 和 重启后各个程序的TSF恢复自己的中英文,简繁体些状态,就使用上已经没影响了

ccyybn avatar Apr 16 '24 16:04 ccyybn

3221225477对应为0xc0000005, 我之前试处理ITfThreadFocsSink 的时候试出来的状态是 nullptr referenced

最近有两个commit做了一点处理,可能可以消除一部分问题,nightly可以试试 @ccyybn

2b9d96868b28670e3394679bdc1e4e211e7bdf0f 952ad12035cfd47e9cad5e60ad577a6a04e0cab3

fxliang avatar Apr 30 '24 03:04 fxliang

3221225477对应为0xc0000005, 我之前试处理ITfThreadFocsSink 的时候试出来的状态是 nullptr referenced

最近有两个commit做了一点处理,可能可以消除一部分问题,nightly可以试试 @ccyybn

2b9d968 952ad12

我感觉似乎是由于两个进程同时使用输入法,就会崩溃,日常使用一般不会有这种同时使用的情况,但是当有自动程序也在调用输入法时,就容易出问题

新版的崩溃概率是要低一些了,当我在执行脚本时,不打字,就很难崩溃了,之前是 playwright 和 执行playwright的命令行这两个进程都会触发崩溃,现在执行脚本时,要再加上我故意在记事本里打字,才容易出现打字卡死崩掉的情况

ccyybn avatar Apr 30 '24 19:04 ccyybn

https://github.com/fxliang/weasel/actions/runs/9109244341 改了一点东西,减少一点不必要的服务端ui更新,有可能再避免一点问题 @ccyybn

fxliang avatar May 16 '24 08:05 fxliang