rime / weasel

【小狼毫】Rime for Windows
https://rime.im
GNU General Public License v3.0
4.17k stars 528 forks source link

[bug] CI 版本,雾凇拼音,若算法服务被拉起,进入部署状态,则当前应用卡死,且算法服务崩溃 #1279

Closed mirtlebot closed 1 month ago

mirtlebot commented 1 month ago

复现步骤:

  1. 安装 Weasel,安装雾凇拼音,部署,确认一切 OK
  2. 对中文词典做一些更改,例如将大字库重新添加等,因为中文词典特别大,部署时间长,效果明显。
  3. 手动退出算法服务
  4. 打字
  5. 卡死,日志文件夹中出现 debug 文件

2024年06月01日16时22分.webm

(视频中截了一段,是因为第一次实验,整个系统卡死了,我乱点后,直接被强退了,上面的 error log 显示未编译完成)

Originally posted by @mirtlebot in https://github.com/rime/weasel/issues/1269#issuecomment-2143359433

猜想:

若此 bug 证实,我猜想之前一些用户未能正常开机自启动的原因是,

之所以会进入部署状态,我猜想可能是有一些人喜欢用第三方软件往词库里面加词(lua 也可以做到),这些东西都需要重新部署

个人猜测和 lua 写的好不好关联不大,毕竟上述实验,一个字都没打上,如果真的是分析和 lua 相关,那只能说在乱打的时候, lua 做了什么事情,或者在卡死后,lua 没做什么事情

fxliang commented 1 month ago

用最新的master的状态,雾凇拼音 步骤: 1,部署,正常可打字 2,修改字典注释掉一个字 3,部署 4,退出服务 5,记事本中打字

未复现问题😅

image try

mirtlebot commented 1 month ago

嗯,试试开启一个大字表呢,那个 44418 字表,那个应该要部署一段时间

我试了三次,都有卡死现象才提的

fxliang commented 1 month ago

一样没有复现问题, Windows 10 LTSC 测试的,版本号10.0.19044 暂缺 Build 19044

部署多长时间影响不大,我试过有空明码部署(完整一次要接近1分钟),删除全部部署好的空明码的文件然后部署,打字也没有卡死

fxliang commented 1 month ago

最新的代码中,从Client发出的消息,如果超时2秒会强制返回0,按理说不会有可能卡死。 https://github.com/rime/weasel/blob/8246b8c511d19a788935ee0b1e295fecc34a78c6/WeaselIPC/WeaselClientImpl.cpp#L195-L215

在处理按键过程中,如果返回0就意味着这个按键事件 rime不处理,直接会跳过相关输入法相关的处理直接将按键交给应用处理,就是直接上屏的状态 https://github.com/rime/weasel/blob/8246b8c511d19a788935ee0b1e295fecc34a78c6/WeaselTSF/KeyEventSink.cpp#L7-L17

如果是Echo中,超时返回0会让Client识别连接无效,也是跳过输入处理的 https://github.com/rime/weasel/blob/8246b8c511d19a788935ee0b1e295fecc34a78c6/WeaselTSF/WeaselTSF.cpp#L235-L261

mirtlebot commented 1 month ago

可能是我少描述了什么,我这里 Windows 11 lot LTSC 和 Windows 23H2(AAtlas OS)照样能复现:

1717234460.webm

Edit:就这样吧,改天再试,或者看看其他人怎么说。

fxliang commented 1 month ago

这个dmp文件可以上传上来,毕竟已经知道你是哪个版本的小狼毫了

fxliang commented 1 month ago

我倒是试出一个退出服务的时候,librime里的一些对象析构时的问题,目前不稳定复现

image

mirtlebot commented 1 month ago

WeaselServer.exe.4772.dmp.zip

这个是重新跑的。Windows 10 虚拟机

我不懂具体实现,但允许我 Off-topic 一下,Weasel 可能在处理 lua 时和其他前端有些不一样。这个 librime-lua 的 bug,其他所有前端都会报错,rime_api_console 也会报错,但唯独 Weasel 不报错,按理说应当是无法同步,用户词典锁定的。

https://github.com/hchunhui/librime-lua/issues/335

Update:

我用实机跑了下(非雾凇配置,但用了雾凇的词库,以及其中的两个 unicode 和 number 两个lua),报了这个错误,实机用的是自己构建的 librime,所以不放 dmp 了

image

fxliang commented 1 month ago

自行构建rime.dll 应该会有rime.pdb, 将这个和weaselserver.pdb 都放exe同目录,在那个分析软件加上那个路径,分析下就有东西出来了至于 c0000005参考 https://learn.microsoft.com/zh-cn/shows/inside/c0000005

mirtlebot commented 1 month ago

不懂,没看到过 rime.pdb,和用 clang 编译的有关系吗?

那个软件也没搞明白,移动 pdb 到程序目录,并添加 symbol 路径后,点分析,提示什么无法生成 xxx,返回了 31 之类。

等你发新版后,其他人有没有复现好了。🤣

fxliang commented 1 month ago

哦,clang 编译是没有的,msvc 的产物

fxliang commented 1 month ago

复现了问题,但是这个未有思路

fxliang commented 1 month ago

有一个办法是注释掉 https://github.com/rime/weasel/blob/8246b8c511d19a788935ee0b1e295fecc34a78c6/RimeWithWeasel/RimeWithWeasel.cpp#L118-L120

不在算法服务里面部署,只能用WeaselDeployer.exe来部署更新

更新,我推自用分支了,目前试了似乎还行

mirtlebot commented 1 month ago

昨天搞懂那个 pdb 分析软件的用法(虚拟机无支持的浏览器,无法打开报告才报错)

里面提示是什么内存访问出错,跟这个一模一样

https://github.com/rime/weasel/issues/1269#issuecomment-2135402753

大概他说的现象,也是这个原因:https://github.com/rime/weasel/issues/1259#issuecomment-2139686462

我原先努力复现,是以为能找到了一些人说的什么 lua 导致崩溃、和开机不能自启的稳定复现方法,看起来不太像。🤣

changzaicl commented 1 month ago

试了一下,现在好多了。用了一天多下来,没有出现假死的情况了