rime / weasel

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

启动了小狼毫算法服务后,再使用DebugView电脑会卡死 #965

Closed Richard-Cat closed 2 weeks ago

Richard-Cat commented 1 year ago

小狼毫版本:0.15.0 DebugView:微软官方的工具,https://learn.microsoft.com/zh-cn/sysinternals/downloads/debugview

log文件里写入了大量日志(几十到几百KB不等): I20230704 10:51:36.478087 8976 core_module.cc:20] registering core components. I20230704 10:51:36.493708 8976 registry.cc:14] registering component: config_builder I20230704 10:51:36.493708 8976 registry.cc:14] registering component: config I20230704 10:51:36.493708 8976 registry.cc:14] registering component: schema I20230704 10:51:36.493708 8976 registry.cc:14] registering component: user_config I20230704 10:51:36.493708 8976 dict_module.cc:25] registering components from module 'dict'. I20230704 10:51:36.493708 8976 registry.cc:14] registering component: tabledb I20230704 10:51:36.493708 8976 registry.cc:14] registering component: stabledb I20230704 10:51:36.493708 8976 registry.cc:14] registering component: plain_userdb I20230704 10:51:36.493708 8976 registry.cc:14] registering component: userdb

临时解决方法是,在DebugView里过滤包含字符”.cc:“的日志,然后电脑就不会卡死了。

determ1ne commented 1 year ago

我在本地测试没有卡死,这些日志都是librime来的,日志是很多但也没有那么多

Richard-Cat commented 1 year ago

我在本地测试没有卡死,这些日志都是librime来的,日志是很多但也没有那么多

可能是使用环境差异,卡是确定的,有多卡就不一定了。

superliufa commented 2 months ago

我遇到了同样的问题,作了一些更详细的测试。 具体的表现为:

  1. 如果在WeaselServer.exe进程已启动的情况下,再去启动Dbgview.exe时,DebugView的界面会出不来。进程会出现在任务管理器中,此后基本上启动任何进程都会卡住,包括任务管理器。此时CPU占用率并不高,不管是进程还是系统。分析那些卡住的进程的等待链也没有发现什么情况。此时如果杀掉了WeaselServer.exe,系统会立刻恢复正常。杀掉Dbgview.exe也行,但系统恢复要慢上一点。
  2. 如果先启动Dbgview.exe,再去启动WeaselServer.exe,会看到大约100条左右的日志出现在DebugView上。的确,虽然多,但也没有很多。我不认为关键在日志的数量上,因为后续并没有更多的日志出现。而且DbgView也能在界面上通过鼠标正常操作,只是不能碰键盘。如果一动键盘,哪怕仅仅单独碰了一下Ctrl或Shift键,都会导致DbgView无响应。
  3. 只要Dbgview.exe开始卡住,就会无法新建进程,而且在别的存量进程上也不能碰键盘,一碰就卡,包括任务管理器。我在测试时偶尔有碰到过某些进程在这种时候能够「例外」,操作键盘不会被卡住,不过目前还没找到规律。
  4. 看上去是Dbgview.exe和WeaselServer.exe这两个进程在键盘消息的处理方面有冲突。过滤掉“.cc:”相关日志并不能解决我遇到的问题,即使让DebugView停止Capture也不行。反之,只要注意启动顺序,并忍住不要去用键盘,暂时可以让它们俩一起工作。
  5. 当系统出现新建进程卡住的故障之后,如果没机会杀进程,只能直接从开始菜单选择重启。重启操作是可以正常完成的。

补充一些信息:我的OS是Windows 10 专业版 22H2,内部版本号是19045.4598。DebugView的版本号是4.90.0.0,不是很新,但个人觉得跟这些东西的版本关系不大。另外,dbgview64.exe跟Dbgview.exe的表现是一样的。

fxliang commented 2 weeks ago

未复现问题,新的librime已经默认不写std::err,应该已经没有太多的log打印了。

另外其实可以用debugviewpp,个人体验下来是比debugview要好用不少了。