TL;DR : rm ~/.cache/ibus/libpinyin/*
Longue réponse :
J'ai un problème similaire, sauf que mon problème est de ne pas pouvoir retourner un caractère chinois dans la colonne suivante. > .
La première chose que je fais est de lancer watch -n 3 -d 'ps auxww|tac'
pour comparer quelle est la différence entre la sortie lorsque le succès (première colonne) et l'échec (colonne suivante) se produisent.
J'ai rapidement remarqué que /usr/lib/ibus/ibus-engine-libpinyin --ibus
qui fonctionnent toujours en cas de succès mais disparaissent en cas d'échec.
Cela signifie que /usr/lib/ibus/ibus-engine-libpinyin --ibus
le processus se bloque lorsque l'on sélectionne un caractère dans la colonne suivante.
Puisque le processus précédent a disparu, alors que Super+Space pour basculer le nouveau processus libpinyin, sélectionnez la première colonne, puis exécutez ps auxww
dans un autre terminal pour connaître les dernières pid
est 6798
, courir sudo strace -ff -vvv -p 6798 -s 1000000
pour comprendre le processus :
[pid 6798] lseek(14, 12288, SEEK_SET) = 12288
[pid 6798] read(14, "", 4096) = 0
[pid 6798] write(2, "ibus-engine-libpinyin: ../src/lookup/phonetic_lookup.h:901: bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArray]: Assertion `m_user_bigram->store(last_token, user)' failed.\n", 323) = 323
[pid 6798] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f59a80e2000
[pid 6798] rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
[pid 6798] rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
[pid 6798] getpid() = 6798
[pid 6798] gettid() = 6798
[pid 6798] tgkill(6798, 6798, SIGABRT) = 0
[pid 6798] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 6798] --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=6798, si_uid=1000} ---
[pid 6800] <... poll resumed> <unfinished ...>) = ?
[pid 6799] <... restart_syscall resumed>) = ?
[pid 6800] +++ killed by SIGABRT (core dumped) +++
[pid 6799] +++ killed by SIGABRT (core dumped) +++
+++ killed by SIGABRT (core dumped) +++
La sortie de strace s'est arrêtée après avoir sélectionné le caractère de la colonne suivante. Je sais maintenant que c'est le noyau déversé . Une autre solution consiste à déboguer avec tail -f /var/log/syslog
pour savoir que c'est systemd-coredump
.
Donc je cours coredumpctl list
pour connaître le coredump lié pid
est 6798
:
Sun 2018-10-28 06:18:31 +08 6798 1000 1000 6 present /usr/lib/ibus/ibus-engine-libpinyin
Je cours coredumpctl dump 6798 --output alamak
pour sauvegarder le coredump dans un fichier alamak, puis exécutez gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak
(le chemin de l'exécutable peut être obtenu à partir de ps auxww
o coredumpctl list
) pour examiner le fichier coredump :
xb@dnxb:~$ gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak
expansion: History expansion on command input is on.
filename: The filename in which to record the command history is "/home/xiaobai/.gdb_history".
remove-duplicates: The number of history entries to look back at for duplicates is 0.
save: Saving of the history record on exit is on.
size: The size of the command history is 10000000.
Reading symbols from /usr/lib/ibus/ibus-engine-libpinyin...(no debugging symbols found)...done.
warning: core file may not match specified executable file.
[New LWP 6798]
[New LWP 6800]
[New LWP 6799]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/ibus/ibus-engine-libpinyin --ibus'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7f59a80971c0 (LWP 6798))]
Essayez thread apply all bt full
y Enter pour naviguer sur la page suivante, je peux voir quelques mots-clés intéressants qui sont les mêmes que ceux de la page précédente. strace
's write()
sortie :
(gdb) thread apply all bt full
Thread 3 (Thread 0x7f59a36a9700 (LWP 6799)):
...
#1 0x00007f59a67cd801 in __GI_abort () at abort.c:79
save_stage = 1
act =
{__sigaction_handler = {sa_handler = 0x555b8ce58800, sa_sigaction = 0x555b8ce58800}, sa_mask = {__val = {0, 18446744073709551600, 0, 0, 0, 140733365772904, 0, 140733365772736, 140023023567312, 21474836480, 140023023552472, 0, 2476426370025201152, 140023023537428, 0, 140023023552472}}, sa_flags = -1488188568, sa_restorer = 0x7f59a74c0c00}
sigs = {__val = {32, 0 <repeats 15 times>}}
#2 0x00007f59a67bd39a in __assert_fail_base (fmt=0x7f59a69447d8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7f59a74c0c00 "m_user_bigram->store(last_token, user)", file=file@entry=0x7f59a74c0b68 "../src/lookup/phonetic_lookup.h", line=line@entry=901, function=function@entry=0x7f59a74c14e0 "bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArra"...) at assert.c:92
str = 0x555b8ce58800 ""
total = 4096
#3 0x00007f59a67bd412 in __GI___assert_fail (assertion=0x7f59a74c0c00 "m_user_bigram->store(last_token, user)", file=0x7f59a74c0b68 "../src/lookup/phonetic_lookup.h", line=901, function=0x7f59a74c14e0 "bool pinyin::PhoneticLookup<nbest>::train_result3(const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*, MatchResult) [with int nbest = 3; MatchResult = _GArray*; GArray = _GArra"...) at assert.c:101
#4 0x00007f59a7476a71 in pinyin_train () at /usr/lib/x86_64-linux-gnu/libpinyin.so.13
#5 0x0000555b8c7e5689 in ()
Maintenant, le mot-clé principal qui cause la corédectomie a été confirmé, google. const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*
trouvera ceci fil de rapport de bug :
J'ai lancé libpinyin dans le terminal et j'ai obtenu le message d'erreur suivant :
debian-user:~$ /usr/lib/ibus/ibus-engine-libpinyin --ibus ibus-engine-libpinyin : ../src/lookup/phonetic_lookup.h:901 : bool pinyin::PhoneticLookup::train_result3(const pinyin::PhoneticKeyMatrix*, constantes pinyin::ForwardPhoneticConstraints*, MatchResult) [avec int nbest = 3 ; MatchResult = _GArray* ; GArray = _GArray] : L'assertion `m_user_bigram->store(last_token, user)' a échoué. Abandonné
Cette erreur est donc liée aux données de l'utilisateur. Lorsque vous sélectionnez une phrase autre que la première, libpinyin essaiera de la stocker dans votre dossier dans votre dossier personnel. Si cela ne fonctionne pas, elle échouera et se terminera.
Vous pouvez vérifier le contenu de ~/.cache/ibus/libpinyin/ . I simplement supprimé tous les fichiers dans ce dossier et tué le processus ibus-engine-libpinyin pour le redémarrer. Les choses sont redevenues normales. Je pense que que le problème que vous avez est probablement le même que le mien. Si ce n'est pas le cas, veuillez fournir les messages d'erreur lorsque vous exécutez ibus-engine-libpinyin dans le terminal
...
J'ai suivi vos instructions et supprimé le dossier ~./cache/ibus/libpinyin . Le problème est résolu.
C'est ça, cours rm ~/.cache/ibus/libpinyin/*
et ça a réglé le problème.