libpinyin / ibus-libpinyin

GNU General Public License v3.0
621 stars 88 forks source link

无法输入“过继”一词 #452

Open SamLukeYes opened 5 months ago

SamLukeYes commented 5 months ago

录屏 2024-02-26 19-46-18.webm

一旦尝试输入该词,ibus-engine-libpinyin 就会崩溃,需要重启 ibus 才能继续输入中文。分别输入这两个字则不受影响。

触发该问题后,在日志中找到以下 core dump:

Process 40794 (.ibus-engine-li) of user 1000 dumped core.

Module p11-kit-trust.so without build-id.
Module libgmp.so.10 without build-id.
Module libhogweed.so.6 without build-id.
Module libnettle.so.8 without build-id.
Module libtasn1.so.6 without build-id.
Module libgnutls.so.30 without build-id.
Module libgiognutls.so without build-id.
Module libp11-kit.so.0 without build-id.
Module libgiognomeproxy.so without build-id.
Module libdconfsettings.so without build-id.
Module libbrotlicommon.so.1 without build-id.
Module libidn2.so.0 without build-id.
Module libunistring.so.5 without build-id.
Module libpcre2-8.so.0 without build-id.
Module libffi.so.8 without build-id.
Module libselinux.so.1 without build-id.
Module libnghttp2.so.14 without build-id.
Module libbrotlidec.so.1 without build-id.
Module libpsl.so.5 without build-id.
Module libncursesw.so.6 without build-id.
Module libreadline.so.8 without build-id.
Module libdb-5.3.so without build-id.
Module libz.so.1 without build-id.
Module libgcc_s.so.1 without build-id.
Module libstdc++.so.6 without build-id.
Module libjson-glib-1.0.so.0 without build-id.
Module liblua.so.5.2 without build-id.
Module libibus-1.0.so.5 without build-id.
Module libopencc.so.1.1 without build-id.
Module libpinyin.so.15 without build-id.
Module .ibus-engine-libpinyin-wrapped without build-id.
Stack trace of thread 40794:
#0  0x00007f558fdc207c __pthread_kill_implementation (libc.so.6 + 0x8d07c)
#1  0x00007f558fd72e06 raise (libc.so.6 + 0x3de06)
#2  0x00007f558fd5b8f5 abort (libc.so.6 + 0x268f5)
#3  0x00007f558fd5b819 __assert_fail_base.cold (libc.so.6 + 0x26819)
#4  0x00007f558fd6b686 __assert_fail (libc.so.6 + 0x36686)
#5  0x00007f55908bd313 _ZN6pinyinL13reduce_tokensEPKP7_GArrayS1_b.part.0 (libpinyin.so.15 + 0x85313)
#6  0x00007f55908bf5ce _ZL11_add_phraseP17_pinyin_context_thP7_GArrayPjli (libpinyin.so.15 + 0x875ce)
#7  0x00007f55908c0054 _ZL22_remember_phrase_recurP18_pinyin_instance_tP7_GArrayS2_mPji (libpinyin.so.15 + 0x88054)
#8  0x00007f55908c0054 _ZL22_remember_phrase_recurP18_pinyin_instance_tP7_GArrayS2_mPji (libpinyin.so.15 + 0x88054)
#9  0x00007f55908c5db7 pinyin_remember_user_input (libpinyin.so.15 + 0x8ddb7)
#10 0x000000000042e6d4 _ZN2PY16LibPinyinBackEnd17rememberUserInputEP18_pinyin_instance_tPKc (.ibus-engine-libpinyin-wrapped + 0x2e6d4)
#11 0x0000000000439858 _ZN2PY19LibPinyinCandidates15selectCandidateERNS_17EnhancedCandidateE (.ibus-engine-libpinyin-wrapped + 0x39858)
#12 0x0000000000430638 _ZN2PY14PhoneticEditor15selectCandidateEj (.ibus-engine-libpinyin-wrapped + 0x30638)
#13 0x0000000000431450 _ZN2PY12PinyinEditor15processKeyEventEjjj (.ibus-engine-libpinyin-wrapped + 0x31450)
#14 0x000000000043431e _ZN2PY12PinyinEngine15processKeyEventEjjj (.ibus-engine-libpinyin-wrapped + 0x3431e)
#15 0x00007f559074d50b _ibus_marshal_BOOLEAN__UINT_UINT_UINT (libibus-1.0.so.5 + 0x1850b)
#16 0x00007f55903f6468 g_closure_invoke (libgobject-2.0.so.0 + 0x17468)
#17 0x00007f5590409908 signal_emit_unlocked_R.isra.0 (libgobject-2.0.so.0 + 0x2a908)
#18 0x00007f559040a441 signal_emit_valist_unlocked (libgobject-2.0.so.0 + 0x2b441)
#19 0x00007f5590410962 g_signal_emit_valist (libgobject-2.0.so.0 + 0x31962)
#20 0x00007f5590410a0f g_signal_emit (libgobject-2.0.so.0 + 0x31a0f)
#21 0x00007f559075d1e2 ibus_engine_service_method_call (libibus-1.0.so.5 + 0x281e2)
#22 0x00007f5590554e88 call_in_idle_cb (libgio-2.0.so.0 + 0x114e88)
#23 0x00007f55902f1629 g_main_dispatch (libglib-2.0.so.0 + 0x5a629)
#24 0x00007f55902f4797 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0x5d797)
#25 0x00007f55902f504f g_main_loop_run (libglib-2.0.so.0 + 0x5e04f)
#26 0x00007f559077488c ibus_main (libibus-1.0.so.5 + 0x3f88c)
#27 0x00000000004211db main (.ibus-engine-libpinyin-wrapped + 0x211db)
#28 0x00007f558fd5d0ce __libc_start_call_main (libc.so.6 + 0x280ce)
#29 0x00007f558fd5d189 __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x28189)
#30 0x0000000000421555 _start (.ibus-engine-libpinyin-wrapped + 0x21555)

Stack trace of thread 40797:
#0  0x00007f558fe3589f __poll (libc.so.6 + 0x10089f)
#1  0x00007f55902f46f7 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0x5d6f7)
#2  0x00007f55902f504f g_main_loop_run (libglib-2.0.so.0 + 0x5e04f)
#3  0x00007f5590565db6 gdbus_shared_thread_func (libgio-2.0.so.0 + 0x125db6)
#4  0x00007f559032154d g_thread_proxy (libglib-2.0.so.0 + 0x8a54d)
#5  0x00007f558fdc0383 start_thread (libc.so.6 + 0x8b383)
#6  0x00007f558fe4300c __clone3 (libc.so.6 + 0x10e00c)

Stack trace of thread 40795:
#0  0x00007f558fe40f8d syscall (libc.so.6 + 0x10bf8d)
#1  0x00007f559034ed20 g_cond_wait (libglib-2.0.so.0 + 0xb7d20)
#2  0x00007f55902bf02b g_async_queue_pop_intern_unlocked (libglib-2.0.so.0 + 0x2802b)
#3  0x00007f5590321b92 g_thread_pool_spawn_thread (libglib-2.0.so.0 + 0x8ab92)
#4  0x00007f559032154d g_thread_proxy (libglib-2.0.so.0 + 0x8a54d)
#5  0x00007f558fdc0383 start_thread (libc.so.6 + 0x8b383)
#6  0x00007f558fe4300c __clone3 (libc.so.6 + 0x10e00c)

Stack trace of thread 40798:
#0  0x00007f558fe3589f __poll (libc.so.6 + 0x10089f)
#1  0x00007f55902f46f7 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0x5d6f7)
#2  0x00007f55902f4d8c g_main_context_iteration (libglib-2.0.so.0 + 0x5dd8c)
#3  0x00007f558d77789d dconf_gdbus_worker_thread (libdconfsettings.so + 0xb89d)
#4  0x00007f559032154d g_thread_proxy (libglib-2.0.so.0 + 0x8a54d)
#5  0x00007f558fdc0383 start_thread (libc.so.6 + 0x8b383)
#6  0x00007f558fe4300c __clone3 (libc.so.6 + 0x10e00c)

Stack trace of thread 40796:
#0  0x00007f558fe3589f __poll (libc.so.6 + 0x10089f)
#1  0x00007f55902f46f7 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0x5d6f7)
#2  0x00007f55902f4d8c g_main_context_iteration (libglib-2.0.so.0 + 0x5dd8c)
#3  0x00007f55902f4dd1 glib_worker_main (libglib-2.0.so.0 + 0x5ddd1)
#4  0x00007f559032154d g_thread_proxy (libglib-2.0.so.0 + 0x8a54d)
#5  0x00007f558fdc0383 start_thread (libc.so.6 + 0x8b383)
#6  0x00007f558fe4300c __clone3 (libc.so.6 + 0x10e00c)
ELF object binary architecture: AMD x86-64

暂未发现其他词能稳定触发类似问题。发行版是 NixOS unstable,桌面环境是 GNOME。

SamLukeYes commented 5 months ago

图片 貌似与 Society 词库有关,禁用该词库并重启 ibus 后就没出现这个问题了。

SamLukeYes commented 5 months ago

在干净的 nixos 虚拟机中似乎无法复现,不知道我还漏了什么复现条件(

epico commented 5 months ago

有可能是用户数据损坏造成的。

SamLukeYes commented 5 months ago

有可能是用户数据损坏造成的。

图片

已经尝试过点击这里的“清除所有数据”,并启用 Society 词库,然后重启 ibus,问题仍会出现

epico commented 5 months ago

请在 Console 下,删除 ~/.cache/ibus/libpinyin/user.conf 文件,再登陆图形界面。

SamLukeYes commented 5 months ago

请在 Console 下,删除 ~/.cache/ibus/libpinyin/user.conf 文件,再登陆图形界面。

这样操作之后问题确实消失了。该文件内容如下:

binary format version:7
model data version:14
database format:BerkeleyDB
epico commented 5 months ago

看来是用户数据损坏造成的。

bh1svr commented 4 months ago

我被这个问题困扰好久了,以前以为是和wayland环境不兼容,后来发现把$HOME下所有ibus相关的配置文件全部删掉就好了 但是每次删除后用不了多久,这个问题还是会出现,严重影响在Linux环境下的工作,实在忍无可忍来这里提issue. 附件是我抓到的stack backtrace 截图 2024-03-04 18-23-36

epico commented 4 months ago

可能也是用户数据文件损坏造成的。

请在 Console 下,删除 ~/.cache/ibus/libpinyin/user.conf 文件,再登陆图形界面。

bh1svr commented 4 months ago

可以肯定是这个原因造成的。还是希望能够找到数据损坏的原因并修复,或者起码做一些防护,在数据文件损坏时输入法不崩溃,能够正常使用输入法并重建数据文件。

Pathsis commented 4 months ago

这可能是因为,第4个候选词之后不能选择。

epico commented 4 months ago

这可能是因为,第4个候选词之后不能选择。

请问您使用的 ibus-libpinyin 和 libpinyin 版本是?

bh1svr commented 4 months ago

我这里又一次出现了问题。目前看不是user.conf损坏造成的,因为问题好坏user.conf文件都是一样的,看不出损害的痕迹。删除user.conf可以修复问题是因为删除这个文件引起了其他文件的重建。 目前看可能出现了问题的文件有: gb_char.dbin opengram.dbin user_bigram.db user.bin user_phrase_index.bin user_pinyin_index.bin 出现问题时,上述文件的大小均小于删除user.conf后重建的文件大小

epico commented 4 months ago

这个问题应该在 ibus-libpinyin 1.15.5 或者之后的版本有所改善,应该会减少出现问题的频率。

bh1svr commented 4 months ago

现在我用的版本是 libpinyin-data-2.8.1-7.fc40.x86_64 libpinyin-2.8.1-7.fc40.x86_64 ibus-libpinyin-1.15.7-1.fc40.x86_64 继续观察中……

bh1svr commented 4 months ago

短短一天时间,问题又出现了,这是用gdb跟踪的结果。看上去是libpinyin/src/pinyin.cpp 534行这句assert没通过 assert(phrase_length == item.get_phrase_length()); 我是不是应该把issue提在那个仓库,还是你们是同一拨开发者? 截图 2024-03-28 10-24-23

epico commented 4 months ago

libpinyin 的开发者也是我,回来我看一下这个问题。

请问您输入的拼音和中文是?

bh1svr commented 4 months ago

这个每次清空数据后到下次发生故障,输入的词语都不同。 本次发生故障,输入的词语包括“联锁” (铁路专业术语,不是“连锁”),”数据“等,但输入”新联锁“不会出现故障。 怀疑和本地存储的用户词语或者动态词频有关。 我本地存储的输入法数据一并打包放在附件里,供参考。 ime_data.tar.gz

Pathsis commented 3 months ago

我目前遇到的问题是,经常性地不能选择第5个候选词。

fxzxmicah commented 3 months ago

来了就看到这个问题,我的问题是,无法输入“无法”和“可以”…… 版本1.15.7

ibus-engine-libpinyin killed by SIGABRT

#1 [libc.so.6] _nl_load_domain.cold
#2 [libc.so.6] 341d2be28035b1c2546e062799b0e8598dd1d726+231799
#3 [libpinyin.so.15] _add_phrase(_pinyin_context_t*, unsigned char, _GArray*, unsigned int*, long, int) [clone .lto_priv.0]
#4 [libpinyin.so.15] _remember_phrase_recur(_pinyin_instance_t*, _GArray*, _GArray*, unsigned long, unsigned int*, int)
#5 [libpinyin.so.15] pinyin_remember_user_input
Process 6211 (ibus-engine-lib) of user 1000 dumped core.

Module libgvfscommon.so from rpm gvfs-1.54.0-2.fc40.x86_64
Module libgvfsdbus.so from rpm gvfs-1.54.0-2.fc40.x86_64
Module libdconfsettings.so from rpm dconf-0.40.0-12.fc40.x86_64
Module libblkid.so.1 from rpm util-linux-2.40-0.9.rc1.fc40.x86_64
Module liblzma.so.5 from rpm xz-5.4.6-3.fc40.x86_64
Module libffi.so.8 from rpm libffi-3.4.4-7.fc40.x86_64
Module libpcre2-8.so.0 from rpm pcre2-10.42-2.fc40.2.x86_64
Module libselinux.so.1 from rpm libselinux-3.6-4.fc40.x86_64
Module libmount.so.1 from rpm util-linux-2.40-0.9.rc1.fc40.x86_64
Module libgmodule-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
Module libkyotocabinet.so.16 from rpm kyotocabinet-1.2.80-5.fc40.x86_64
Module libz.so.1 from rpm zlib-ng-2.1.6-2.fc40.x86_64
Module liblua-5.4.so from rpm lua-5.4.6-5.fc40.x86_64
Module libgobject-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
Module libglib-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
Module libgio-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
Module libibus-1.0.so.5 from rpm ibus-1.5.30~rc1-1.fc40.x86_64
Module libpinyin.so.15 from rpm libpinyin-2.8.1-7.fc40.x86_64
Module ibus-engine-libpinyin from rpm ibus-libpinyin-1.15.7-1.fc40.x86_64
Stack trace of thread 6211:
#0  0x00007f193e0ab144 __pthread_kill_implementation (libc.so.6 + 0x98144)
#1  0x00007f193e05365e raise (libc.so.6 + 0x4065e)
#2  0x00007f193e03b902 abort (libc.so.6 + 0x28902)
#3  0x00007f193e03b81e __assert_fail_base.cold (libc.so.6 + 0x2881e)
#4  0x00007f193e04b977 __assert_fail (libc.so.6 + 0x38977)
#5  0x00007f193e95cdc8 _ZL11_add_phraseP17_pinyin_context_thP7_GArrayPjli.lto_priv.0 (libpinyin.so.15 + 0x76dc8)
#6  0x00007f193e9718ae _ZL22_remember_phrase_recurP18_pinyin_instance_tP7_GArrayS2_mPji (libpinyin.so.15 + 0x8b8ae)
#7  0x00007f193e9718ae _ZL22_remember_phrase_recurP18_pinyin_instance_tP7_GArrayS2_mPji (libpinyin.so.15 + 0x8b8ae)
#8  0x00007f193e971b99 pinyin_remember_user_input (libpinyin.so.15 + 0x8bb99)
#9  0x0000560d8620e778 _ZN2PY14PhoneticEditor23selectCandidateInternalERNS_17EnhancedCandidateE (ibus-engine-libpinyin + 0x19778)
#10 0x0000560d8620d2f4 _ZN2PY14PhoneticEditor15selectCandidateEj (ibus-engine-libpinyin + 0x182f4)
#11 0x0000560d8620f808 _ZN2PY12PinyinEditor15processKeyEventEjjj.part.0 (ibus-engine-libpinyin + 0x1a808)
#12 0x0000560d86213088 _ZN2PY12PinyinEngine15processKeyEventEjjj (ibus-engine-libpinyin + 0x1e088)
#13 0x00007f193e8752c8 _ibus_marshal_BOOLEAN__UINT_UINT_UINT (libibus-1.0.so.5 + 0x152c8)
#14 0x00007f193e4fa5da g_closure_invoke (libgobject-2.0.so.0 + 0x115da)
#15 0x00007f193e52a5f0 signal_emit_unlocked_R.isra.0 (libgobject-2.0.so.0 + 0x415f0)
#16 0x00007f193e51a519 signal_emit_valist_unlocked (libgobject-2.0.so.0 + 0x31519)
#17 0x00007f193e51af11 g_signal_emit_valist (libgobject-2.0.so.0 + 0x31f11)
#18 0x00007f193e51afd3 g_signal_emit (libgobject-2.0.so.0 + 0x31fd3)
#19 0x00007f193e88ce8c ibus_engine_service_method_call (libibus-1.0.so.5 + 0x2ce8c)
#20 0x00007f193e799c66 call_in_idle_cb.lto_priv.2 (libgio-2.0.so.0 + 0x105c66)
#21 0x00007f193e5a9dad g_idle_dispatch (libglib-2.0.so.0 + 0x62dad)
#22 0x00007f193e5a368c g_main_context_dispatch_unlocked.lto_priv.0 (libglib-2.0.so.0 + 0x5c68c)
#23 0x00007f193e604788 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0xbd788)
#24 0x00007f193e5a9647 g_main_loop_run (libglib-2.0.so.0 + 0x62647)
#25 0x00007f193e8a5f00 ibus_main (libibus-1.0.so.5 + 0x45f00)
#26 0x0000560d86202227 main (ibus-engine-libpinyin + 0xd227)
#27 0x00007f193e03d088 __libc_start_call_main (libc.so.6 + 0x2a088)
#28 0x00007f193e03d14b __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x2a14b)
#29 0x0000560d86202bc5 _start (ibus-engine-libpinyin + 0xdbc5)

Stack trace of thread 6212:
#0  0x00007f193e12918d syscall (libc.so.6 + 0x11618d)
#1  0x00007f193e60183d g_cond_wait (libglib-2.0.so.0 + 0xba83d)
#2  0x00007f193e56e58b g_async_queue_pop_intern_unlocked (libglib-2.0.so.0 + 0x2758b)
#3  0x00007f193e5d4a93 g_thread_pool_spawn_thread (libglib-2.0.so.0 + 0x8da93)
#4  0x00007f193e5d38a3 g_thread_proxy (libglib-2.0.so.0 + 0x8c8a3)
#5  0x00007f193e0a91b7 start_thread (libc.so.6 + 0x961b7)
#6  0x00007f193e12b39c __clone3 (libc.so.6 + 0x11839c)

Stack trace of thread 6214:
#0  0x00007f193e11d72d __poll (libc.so.6 + 0x10a72d)
#1  0x00007f193e604724 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0xbd724)
#2  0x00007f193e5a9647 g_main_loop_run (libglib-2.0.so.0 + 0x62647)
#3  0x00007f193e7a7e42 gdbus_shared_thread_func.lto_priv.0 (libgio-2.0.so.0 + 0x113e42)
#4  0x00007f193e5d38a3 g_thread_proxy (libglib-2.0.so.0 + 0x8c8a3)
#5  0x00007f193e0a91b7 start_thread (libc.so.6 + 0x961b7)
#6  0x00007f193e12b39c __clone3 (libc.so.6 + 0x11839c)

Stack trace of thread 6216:
#0  0x00007f193e11d72d __poll (libc.so.6 + 0x10a72d)
#1  0x00007f193e604724 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0xbd724)
#2  0x00007f193e5a4b03 g_main_context_iteration (libglib-2.0.so.0 + 0x5db03)
#3  0x00007f193dc6d705 dconf_gdbus_worker_thread (libdconfsettings.so + 0x7705)
#4  0x00007f193e5d38a3 g_thread_proxy (libglib-2.0.so.0 + 0x8c8a3)
#5  0x00007f193e0a91b7 start_thread (libc.so.6 + 0x961b7)
#6  0x00007f193e12b39c __clone3 (libc.so.6 + 0x11839c)

Stack trace of thread 6213:
#0  0x00007f193e11d72d __poll (libc.so.6 + 0x10a72d)
#1  0x00007f193e604724 g_main_context_iterate_unlocked.isra.0 (libglib-2.0.so.0 + 0xbd724)
#2  0x00007f193e5a4b03 g_main_context_iteration (libglib-2.0.so.0 + 0x5db03)
#3  0x00007f193e5a4b59 glib_worker_main (libglib-2.0.so.0 + 0x5db59)
#4  0x00007f193e5d38a3 g_thread_proxy (libglib-2.0.so.0 + 0x8c8a3)
#5  0x00007f193e0a91b7 start_thread (libc.so.6 + 0x961b7)
#6  0x00007f193e12b39c __clone3 (libc.so.6 + 0x11839c)
ELF object binary architecture: AMD x86-64
epico commented 3 months ago

可以尝试在 Console 下,删除 ~/.cache/ibus/libpinyin/user.conf 文件试试,再重新登录。

fxzxmicah commented 3 months ago

可以尝试在 Console 下,删除 ~/.cache/ibus/libpinyin/user.conf 文件试试,再重新登录。

我看到上面的讨论了,也尝试了,确实有用。但是一直这样也不是解决办法。

epico commented 3 months ago

可以考虑关闭 将每个输入记录为新的词汇 的选项。

SamLukeYes commented 3 months ago

可以考虑关闭 将每个输入记录为新的词汇 的选项。

关掉这个选项后是不是就不会记录新词汇了啊?

epico commented 3 months ago

还是会记录相邻两个词的关联关系的,但是无法导出用户的新词汇...

请问是否启用了云输入功能呢?

fxzxmicah commented 3 months ago

可以考虑关闭 将每个输入记录为新的词汇 的选项。

倒是还没这么频繁,或者说其实也并不频繁。ibus相关的组件有更新的时候似乎容易发生,没有更新的话似乎也不会发生。