Emacs 문제를 어떻게 해결합니까?


21

원하는대로 Emacs가 작동하지 않는 경우 문제를 해결하려면 어떻게해야합니까? 문제를 직접 찾아서 해결하기 위해 어떤 조치를 취할 수 있습니까?

아니면, 여기 (또는 메일 링리스트 또는 다른 포럼에있는) 사람들이 내 문제를 해결하는 데 도움이되는 유용한 정보를 어떻게 수집 할 수 있습니까?

내 Emacs에는 많은 패키지, 인터넷 전체에서 복사 및 붙여 넣기 (또는 죽이고 yan) 된 스 니펫 모음, 내가 작성한 글을 기억하지 못하거나 더 이상 이해하지 못하는 내 자신의 맞춤 설명이 포함되어 있습니다. 이러한 모든 합병증을 이해하는 방법이 있습니까?


이것이 최선의 장소인지 확실하지 않지만 첫 단계로 답변 / 의견을받는 많은 질문이 emacs -Q있습니다. 나는이 질문들을 새로운 사용자들을위한 일반적인 도움으로 연결시키는 것으로 작성했다.
Tyler

네, 이곳이 가장 좋은 곳입니다. 실제로, 그러한 질문은 거의 2 년 전에 제안되었습니다 : meta.emacs.stackexchange.com/q/198/184 감사합니다!
T. Verron

답변:


28

1 단계 : 달리기 emacs -Q

가장 먼저해야 할 일은 사용자 정의없이 emacs를 실행하는 것입니다. 바닐라 이맥스에서 문제를 재현 할 수 있다면 실제로는 이맥스 자체의 버그 일 수 있습니다. 드문 일이지만 첫 단계로 배제합니다.

명령 줄에서 -Q플래그 (예 :)로 Emacs를 시작 emacs -Q하면 로컬 사용자 정의가로드되지 않은 베어 또는 'vanilla'emacs가 표시됩니다. 여전히 문제가 발생합니까? 그렇다면 "버그 레시피 제공"으로 건너 뛰십시오.

1b 단계 : 패키지에 문제가있는 경우 어떻게합니까?

문제가 특정 패키지에 국한된 경우 해당 패키지를로드하지 않으면 문제를 재현 할 수 없습니다. 그러나 모든 구성이 아닌 관련 패키지 만로드하려고합니다. 이렇게하려면 emacs -Q다시 실행 하고 다음과 같은 간단한 스크립트를 준비하십시오.

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

교체 package1로드 할 패키지의 이름으로. 여러 패키지를로드해야하는 경우 이에 따라 스크립트를 수정하십시오.

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

이 코드를로드하려면 *scratch*버퍼에 붙여넣고을 호출하면 M-x eval-buffer됩니다. (또는 다른 코드가없는 한 모든 버퍼!).

이제 패키지를로드했으며 테스트중인 패키지 만로드했습니다. 지금 문제를 재현 할 수 있다면 "버그 레시피 제공"으로 건너 뛰십시오.

2 단계 : 버그 찾기 .emacs

이제 구성에 문제가 있음을 확인했습니다 ( "전화가 집안에서 온 것입니다!"). 구성의 길이는 수천 줄이 될 수 있으며 여러 파일을로드 할 수 있습니다. 문제를 찾으려면 이진 검색을 수행하여 한 번에 코드의 절반을 주석 처리하여 범위를 좁 힙니다. 1

  1. 옵션 emacs없이 일반 이맥스를 엽니 다 -Q.
  2. 설정 파일을여십시오 (보통 시도하지 못하는 경우 ~/.emacs또는 ).emacs.d/init.elC-h v user-init-file
  3. 파일의 첫 번째 절반을 선택하십시오. C-space표시를 설정하려면 절반을 아래로 스크롤하여 영역을 확장하십시오.
  4. 선택 영역을 주석 M-;하고 파일을 저장
  5. 오픈 emacs (당신의 테스트 이맥스 최초 실행 이맥스를 떠나). 테스트 emacs 는 구성의 축소 버전을 읽습니다.
  6. 테스트 이맥스 에서 문제를 재현 해보십시오
  7. 재현 할 수 없으면 테스트 emacs를 닫고 원래 emacs undo에서 주석으로 주석을 C-/남기고 나머지 코드의 절반을 주석 처리하십시오. 새로운 테스트 이맥스를 열고 다시 시도하십시오.
  8. 문제를 재현 할 수 있으면 나머지 코드의 절반을 주석 처리하고 문제가 지속되는지 확인하십시오.
  9. 문제를 재현하는 데 필요한 가장 작은 구성 비트를 찾을 때까지이 프로세스를 반복하십시오.

특정 패키지에 문제가있는 경우 물론 해당 패키지를로드하는 코드를 주석 처리하지 않은 상태로 두어야합니다.

구성 파일이 다른 파일을로드하면 검색을 해당 파일로 확장 할 수도 있습니다.

이 시점에서 문제는 한두 줄의 코드로 인한 것임을 알 수 있습니다. 직접 고칠 수도 있습니다. 그렇다면 축하합니다. 무언가를 배웠습니다! 그렇지 않으면 3 단계로 이동하십시오.

3 단계 : 버그 레시피 제공

이 시점에서 여기에 게시 할 자세한 버그 레시피를 제공 할 수 있어야합니다. 다음을 포함해야합니다.

  • 이맥스 버전 (이맥스에서 얻을 수있는 M-x emacs-version
  • 운영 체제 (Windows #, Mac, Linux 배포)
  • 해당되는 경우 어려움을 겪고있는 패키지 버전
  • 예상되는 상황실제 상황 포함하여 문제를 설명하는 데 필요한 특정 단계 .

예를 들어 다음과 같은 질문을 게시 할 수 있습니다.

슈퍼 모드에 문제가 있습니다. 을 (를) 사용하면 M-x sm-compile-codePayPal 계정에서 인출됩니다.

재현 단계 :

수퍼 모드로드 :

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • 로 새 파일을여십시오 C-x C-f my-code
  • 코드 줄을 입력하십시오 :
10 goto 10
  • 요구 M-x sm-compile-code

나는 이것이 슈퍼 컴파일러를 호출하고 내 프로그램을 컴파일 할 것으로 기대합니다. 대신 미니 버퍼에 "페이팔에서 수퍼 모드 작성자에게 $ 100가 전송되었습니다"라는 메시지가 표시됩니다.

GNU Emacs 25.1.50.3
데비안 리눅스
수퍼 모드 버전 3.1415


1 버그 헌터 패키지는,이 당신을 도울 수있는 (반) 자동으로 초기화 파일을 양분.


어쩌면 당신은 버그 헌터를 언급 할 수 있습니다.
Omar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.