Как я могу отладить Mutt, когда он зависает?

785
Sauce McBoss

Моя установка Mutt, кажется, работает хорошо во всех аспектах, за исключением того, что он зависает, если я оставляю его открытым слишком долго. Пока я продолжаю взаимодействовать с интерфейсом, он, кажется, остается в живых. Но если я начну писать письмо или просто позволю ему простаивать слишком долго, он зависнет. Ctrl+cне убивает его, поэтому я просто должен приостановить его Ctrl+zи убить его kill <pid>.

Вместо того, чтобы спрашивать о том, что может быть не так с моей установкой, я хотел бы знать, как будет устраняться такая проблема. (Хотя любые подсказки были бы очень полезны!) Поскольку экран Mutt заморожен, я понятия не имею, что происходит. Какой лучший способ отладить что-то подобное?

2

2 ответа на вопрос

0
StandardEyre

muttможет быть запущен в режиме отладки. Это создаст файл отладки, .muttdebug0который может помочь отладке.

Со muttстраницы руководства :

-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. 

Другой подход - открыть два терминальных сеанса рядом. Беги topили htopв одном. В другом беги mutt. Когда проблема обнаружится, посмотрите, что topотображается. (Если topтакже зависает, проблема может быть больше, чем mutt.)

Вы также можете отредактировать свой пост, чтобы включить больше информации о вашей системе и о том, что она делает.

  1. Если muttзависает в одно и то же время каждый день, выполняет ли другая работа что-то с I / O в это время?
  2. Если он muttвсегда зависает через N минут после входа в систему, есть ли у вас какая-либо другая задача, которая запускается при входе в систему, а затем потребляет много ресурсов? (Запуск muttв режиме отладки несколько раз поможет определить шаблоны в файлах журнала.)
  3. У вас есть доступ /var/log/messagesили другие журналы, или sar?

Это может быть mutt, или muttзамерзание может быть признаком чего-то другого.

0
Kirill Gorelov

Я прикрепил к замороженному процессу дурака с помощью GDB. Вот что я нашел:

(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 

Это ожидало бесконечно на блокирующем чтении. Чтобы исправить это, следует либо выполнить чтение с тайм-аутом, либо сделать вызов отменяемым, чтобы он прерывался при получении сигнала, такого как SIGINT.

Похожие вопросы