TL; DR: rm ~/.cache/ibus/libpinyin/*
Lange Antwort:
Ich habe ein ähnliches Problem, außer dass mein Problem kein chinesisches Zeichen in der nächsten Spalte zurückgeben kann > .
Als erstes führe ich aus, um watch -n 3 -d 'ps auxww|tac'
zu vergleichen, was der Unterschied zwischen der Ausgabe ist, wenn Erfolg (erste Spalte) und Fehler (nächste Spalte) auftreten.
Ich bemerkte schnell, dass es /usr/lib/ibus/ibus-engine-libpinyin --ibus
immer noch erfolgreich läuft, aber bei Misserfolg verschwindet.
Dies bedeutet einen /usr/lib/ibus/ibus-engine-libpinyin --ibus
Prozessabsturz, wenn das Zeichen in der nächsten Spalte ausgewählt wird.
Da der vorherige Prozess gegangen ist, während Super+Spaceauf Toggle neuen libpinyin Prozess, die erste Spalte auswählen, dann lief ps auxww
in einem anderen Endgerät der neueste zu wissen pid
ist 6798
, führt sudo strace -ff -vvv -p 6798 -s 1000000
den Prozess zu verstehen:
[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) +++
Die Strace-Ausgabe wurde nach Auswahl des Zeichens in der nächsten Spalte gestoppt. Jetzt weiß ich, dass der Kern abgeladen ist . Ein alternativer Weg ist das Debuggen mit, um tail -f /var/log/syslog
zu wissen, dass es ist systemd-coredump
.
Also coredumpctl list
renne ich, um zu wissen, dass der Coredump Folgendes pid
ist 6798
:
Sun 2018-10-28 06:18:31 +08 6798 1000 1000 6 present /usr/lib/ibus/ibus-engine-libpinyin
Ich coredumpctl dump 6798 --output alamak
starte, um Coredump in einer Alamak-Datei zu speichern, und führe dann aus gdb -q /usr/lib/ibus/ibus-engine-libpinyin alamak
(der ausführbare Pfad kann von ps auxww
oder stammen coredumpctl list
), um die Coredump-Datei zu untersuchen:
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))]
Versuchen thread apply all bt full
und die Enternächste Seite zu navigieren, kann ich einiges interessantes Stichwort sehen, die gleich mit dem vorherigen ist strace
‚s write()
Ausgang:
(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 ()
Jetzt wurde das Hauptschlüsselwort, das den Coredump verursacht, Google const pinyin::PhoneticKeyMatrix*, const pinyin::ForwardPhoneticConstraints*
, bestätigt . Es wird dieser Fehlerbericht-Thread gefunden :
Ich habe libpinyin im Terminal ausgeführt und die folgende Fehlermeldung erhalten:
Debian-Benutzer: ~ $ / usr / lib / ibus / ibus-engine-libpinyin --ibus ibus-engine-libpinyin: ../src/lookup/phonetic_lookup.h:901: bool pinyin :: PhoneticLookup :: train_result3 (const pinyin :: PhoneticKeyMatrix *, const pinyin :: ForwardPhoneticConstraints *, MatchResult) [mit int nbest = 3; MatchResult = _GArray *; GArray = _GArray]: Die Behauptung "m_user_bigram-> store (last_token, user)" ist fehlgeschlagen. Abgebrochen
Dieser Fehler hängt also mit den Benutzerdaten zusammen. Wenn Sie eine andere als die erste Phrase auswählen, versucht libpinyin, sie in Ihrem Home-Ordner zu speichern. Wenn es nicht funktioniert, schlägt es fehl und wird beendet.
Möglicherweise möchten Sie den Inhalt in ~ / .cache / ibus / libpinyin / überprüfen. Ich habe einfach alle Dateien in diesem Ordner gelöscht und den ibus-engine-libpinyin-Prozess beendet, um ihn neu zu starten. Die Dinge normalisieren sich wieder. Ich denke, das Problem, das Sie haben, ist wahrscheinlich dasselbe wie meines. Wenn nicht, geben Sie bitte Fehlermeldungen an, wenn Sie ibus-engine-libpinyin im Terminal ausführen
...
Ich habe Ihre Anweisungen befolgt und den Ordner ~. / Cache / ibus / libpinyin gelöscht. Das Problem ist gelöst.
Das war's, lauf rm ~/.cache/ibus/libpinyin/*
, und es hat das Problem behoben.