얼어 붙은 이맥스 디버깅


47

이메일에 mew를 사용하고 있습니다. SMTP 용 전자 메일 공급자와 함께 TLS를 사용해야합니다. 그러나, 그것을 불러 오려고 할 때, 이맥스는 멈 춥니 다.

이 기회에 Emacs 패키지에 대해 더 많이 배우고 싶습니다. 이 문제를 디버깅하는 방법은 무엇입니까? Common Lisp와 같은 일종의 내장 디버거가 있습니까? 로깅을 사용할 수 있습니까?


3
어떻게 "그것을 불러?" Lisp에 정의 된 Emacs 명령을 사용하는 경우 (1) 명령을 정의하는 소스 코드를로드하고 (2) use을 사용 M-x debug-on-entry THE-COMMAND하여 디버거를 단계별로 사용 d하거나 때로는 c일부 단계를 건너 뛸 수 있습니다. 소스 코드를 다른 프레임에 열어 두어 디버거가 수행하는 작업을 수행 할 수 있습니다. 여기에 표시된 내용을보고하거나 Emacs 버그가 있다고 생각되면을 사용하여보고하십시오 M-x report-emacs-bug.
Drew

답변:


44

에 의지하기 전에 gdbUnix-y 운영 체제를 사용하는 경우 다른 답변에서 언급 한 파일에 SIGUSR2설명 된 것처럼 Emacs 프로세스로 보낼 수 있습니다 DEBUG.

$ kill -SIGUSR2 <emacs_pid_goes_here>

그러면 Emacs는 현재 루프에서 Lisp 디버거로 침입하려고 시도합니다.

또는 emacs pid를 수동으로 입력하지 않고이 라이너를 사용하십시오.

$ ps aux | grep -ie emacs | grep -v grep | awk '{print $2}' | xargs kill -SIGUSR2

또는 killall가능한 경우 :

$ killall -USR2 emacs

1
그것을 두 번해야했습니다 (잘, 나는 다시 시도하기 전에 1 초 이상 기다릴 수 있습니다 :-). 어쨌든, 그것은 문제를 지적했습니다 (긴 줄에는 글꼴 잠금 처리가 너무 느립니다).
Stéphane Gourichon

font-lock은 Emacs를 정지시키는 것으로 알려져 있습니다. 매 처가 트리거되지만 포인트를 앞으로 이동시키지 않으면 영원히 다시 트리거됩니다.
Lindydancer 11

와우, 그것은 훌륭했다. 여전히 내 문제의 원인을 확실하지 않지만 그 트릭은 생명의 은인입니다. 감사합니다!
Matt

3
내 시스템에서 oneliner를 'killall -USR2 emacs'로 단순화 할 수 있습니다 (물론 여러 Emacs 프로세스가있는 경우 피하십시오).
YoungFrog

1
이에 대한 htop ( en.wikipedia.org/wiki/Htop )을 추천 하십시오. 신호 /를 검색 emacs하고 k전송합니다. Mac에서 활동 모니터를 사용하여 수행 할 수도 있습니다 (메뉴 :보기 | 신호를 프로세스로 보내기).
Lassi

36

을 눌렀을 때 정지가 사라지면 C-g내장 디버거를 사용할 수 있습니다. M-x toggle-debug-on-quit메시지를 보내기 전에 입력 하고 메시지가 멈췄을 C-g때 입력 한 다음 나타나는 *Backtrace*버퍼를 검사하십시오 .

C-g도움 이 되지 않으면 동결이 아마도 C 코드에서 발생할 수 있으므로와 같은 외부 디버거를 사용해야합니다 gdb. 그 방법에 대한 힌트를 제공 C-h C-d하는 DEBUG파일 을 보려면 누르십시오 . ( Emacs 저장소 웹 인터페이스에서 DEBUG 파일을 읽을 수도 있습니다 .) 이 답변gdbEmacs와 함께 사용하는 방법에 대한 자세한 정보를 제공합니다 .


C-g여러 번 맞아야 할 수도 있습니다 C-g C-g C-g..
Drew

@Drew 또한 여러 번 때리는 것이 필요하다는 것을 알았습니다. 왜 그런지 아십니까?
Wilfred Hughes

2
예. Emacs 매뉴얼 노드를Quitting 참조하십시오 . 어떻게 찾았어요? C-h r i을 입력 한 다음 "Cg"를 입력하고을 누르십시오 RET.
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.