Wie kann ich Mutt debuggen, wenn es einfriert?

917
Sauce McBoss

Meine Installation von Mutt scheint in jeder Hinsicht gut zu funktionieren, außer dass sie hängen bleibt, wenn ich sie zu lange offen lasse. Solange ich weiterhin mit der Schnittstelle interagiere, scheint sie am Leben zu bleiben. Wenn ich jedoch anfange, eine E-Mail zu schreiben oder einfach zu lange im Leerlauf zu stehen, friert sie ein. Ctrl+ctötet es nicht, also muss ich es einfach mit beenden und mit Ctrl+ztöten kill <pid>.

Anstatt zu fragen, was möglicherweise an meiner Installation falsch ist, würde ich gerne wissen, wie diese Art von Problem debuggen würde. (Obwohl alle Hinweise sehr hilfreich wären!) Da der Mutt-Bildschirm eingefroren ist, habe ich keine Ahnung, was los ist. Was ist der beste Weg, um so etwas zu debuggen?

2

2 Antworten auf die Frage

0
StandardEyre

muttkann im Debug-Modus gestartet werden. Dadurch wird eine Debug-Datei erstellt .muttdebug0, die das Debuggen unterstützen kann.

Aus der muttManpage:

-d level If mutt was complied with +DEBUG log debugging output to ~/.muttdebug0.  Level can range from 1-5 and effects verbosity.  A value of 2 is recommended. 

Ein anderer Ansatz besteht darin, zwei Terminalsitzungen nebeneinander zu eröffnen. Laufen topoder htopin einem. In der anderen laufen mutt. Wenn das Problem auftritt, sehen Sie sich an, was topangezeigt wird. (Wenn topauch einfriert, ist das Problem möglicherweise größer als mutt.)

Sie können Ihren Beitrag auch so bearbeiten, dass er weitere Informationen zu Ihrem System und dessen Aktivitäten enthält.

  1. Wenn sich muttjeden Tag zur gleichen Zeit hängt, macht dann ein anderer Job etwas mit I / O?
  2. Wenn muttimmer nach hängt N Anzahl der Minuten nach der Anmeldung müssen Sie eine andere Aufgabe, die bei der Anmeldung startet und verbraucht dann viele Ressourcen? (Wenn Sie den muttDebug-Modus mehrmals ausführen, können Sie Muster in den Protokolldateien erkennen.)
  3. Haben Sie Zugriff auf /var/log/messagesoder andere Protokolle oder sar?

Es kann sein mutt, oder das muttEinfrieren kann ein Symptom für etwas anderes sein.

0
Kirill Gorelov

Ich habe mich an einen Frozen Mutt-Prozess mit gdb angeschlossen. Folgendes habe ich gefunden:

(gdb) bt

#0 0x00007f8327de76b0 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:81 #1 0x00007f832899014b in ?? () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 #2 0x00007f832898e16b in BIO_read () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 #3 0x00007f8328cadb54 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0 #4 0x00007f8328caed55 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0 #5 0x00007f8328cac174 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.0.0 #6 0x0000000000484365 in ssl_socket_read (conn=<optimized out>, buf=<optimized out>, len=<optimized out>) at mutt_ssl.c:304 #7 0x0000000000485bb7 in mutt_sasl_conn_read (conn=0xa1d660,  buf=0xa1d7f0 "+ idling\r\nDLE terminated (Success)\r\n38441 INTERNALDATE \"15-Oct-2017 12:27:13 +0000\" FLAGS () BODY[HEADER.FIELDS (DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY"..., len=1024) at mutt_sasl.c:555 #8 0x00000000004836b9 in mutt_socket_readchar (conn=conn@entry=0xa1d660, c=c@entry=0x7ffc9ee890cf "") at mutt_socket.c:172 #9 0x00000000004837d2 in mutt_socket_readln_d (buf=0xa266a0 "+ idling", buflen=512, conn=0xa1d660, dbg=dbg@entry=2) at mutt_socket.c:202 #10 0x0000000000490328 in imap_cmd_step (idata=idata@entry=0x9fe990) at command.c:112 #11 0x0000000000491188 in imap_exec (idata=0x9fe990, cmdstr=cmdstr@entry=0x0, flags=flags@entry=1) at command.c:244 #12 0x00000000004912fc in cmd_queue (cmdstr=0x4b3de5 "IDLE", idata=0x9fe990) at command.c:377 #13 cmd_start (idata=0x9fe990, cmdstr=0x4b3de5 "IDLE", flags=0) at command.c:402 #14 0x0000000000491370 in imap_cmd_start (cmdstr=0x4b3de5 "IDLE", idata=idata@entry=0x9fe990) at command.c:76 #15 imap_cmd_idle (idata=idata@entry=0x9fe990) at command.c:313 #16 0x0000000000493328 in imap_check_mailbox (ctx=ctx@entry=0xa37ba0, index_hint=index_hint@entry=0x7ffc9ee89214, force=force@entry=0) at imap.c:1401 #17 0x0000000000442d2a in mx_check_mailbox (ctx=0xa37ba0, index_hint=index_hint@entry=0x7ffc9ee89214, lock=<optimized out>, lock@entry=0) at mx.c:1336 #18 0x000000000041e1b8 in mutt_index_menu () at curs_main.c:555 #19 0x000000000040833c in main (argc=1, argv=<optimized out>) at main.c:1061 

Es wartete unendlich lange auf eine Blockade. Um dies zu beheben, sollte man entweder mit einem Timeout lesen oder den Anruf abbrechen, sodass er beim Empfang eines Signals wie SIGINT unterbrochen wird.