Bước 1: chạy emacs -Q
Điều đầu tiên bạn cần làm là chạy emacs mà không có bất kỳ tùy chỉnh nào của bạn. Nếu bạn có thể tái tạo vấn đề trong Emilla vanilla, nó thực sự có thể là một lỗi trong chính Emacs. Điều đó hiếm, nhưng chúng tôi loại trừ nó như một bước đầu tiên.
Nếu bạn bắt đầu Emacs từ dòng lệnh bằng -Q
cờ, nghĩa là emacs -Q
, bạn sẽ nhận được một emacs trần hoặc 'vanilla', không có tùy chỉnh cục bộ nào được tải. Vấn đề của bạn vẫn xảy ra? Nếu vậy, bỏ qua phần "Cung cấp công thức sửa lỗi".
Bước 1b: nếu vấn đề xảy ra với một gói thì sao?
Nếu vấn đề của bạn là cụ thể đối với một gói cụ thể, thì rõ ràng bạn không thể sao chép nó mà không tải gói đó. Nhưng bạn chỉ muốn tải gói liên quan chứ không phải tất cả cấu hình của bạn. Để làm điều đó, hãy chạy emacs -Q
lại và chuẩn bị một đoạn script ngắn như sau:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
Thay thế package1
bằng tên của gói bạn muốn tải. Nếu bạn cần tải nhiều gói, hãy sửa đổi tập lệnh cho phù hợp:
(require 'package)
(setq package-load-list
'((package1 t)
(package2 t)
(package3 t)))
(package-initialize)
Để tải mã này, bạn có thể dán mã vào *scratch*
bộ đệm và gọi M-x eval-buffer
. (hoặc bất kỳ bộ đệm nào, miễn là nó không có bất kỳ mã nào khác trong đó!).
Tại thời điểm này, bạn đã tải (các) gói và chỉ các gói bạn đang thử nghiệm. Nếu bạn có thể tái tạo vấn đề ngay bây giờ, hãy bỏ qua phần "Cung cấp công thức sửa lỗi".
Bước 2: Tìm lỗi trong .emacs
Bây giờ bạn đã xác nhận rằng vấn đề đến từ một cái gì đó trong cấu hình của bạn ("cuộc gọi đến từ trong nhà!"). Cấu hình của bạn có thể dài hàng nghìn dòng và có thể tải nhiều tệp khác nhau. Để tìm ra vấn đề, bạn sẽ thực hiện tìm kiếm nhị phân, nhận xét một nửa mã tại một thời điểm để thu hẹp mọi thứ. 1
- Mở emacs thường xuyên của bạn
emacs
, mà không có -Q
tùy chọn.
- Mở tệp cấu hình của bạn (thường
~/.emacs
hoặc .emacs.d/init.el
, nếu bạn không thể tìm thấy nó thử C-h v user-init-file
)
- Chọn nửa đầu của tệp:
C-space
để đặt dấu, cuộn xuống một nửa để mở rộng vùng
- Nhận xét khu vực đã chọn:
M-;
và lưu tệp
- Mở một cái mới
emacs
( emacs thử nghiệm của bạn ), để các emacs đầu tiên chạy. kiểm tra emacs sẽ đọc phiên bản rút gọn của cấu hình của bạn.
- Cố gắng tái tạo vấn đề trong thử nghiệm emacs
- Nếu bạn không thể sao chép nó, gần emacs thử nghiệm , và trong emacs ban đầu của bạn
undo
nhận xét với C-/
, và nhận xét ra một nửa số mã còn lại. Mở một emacs thử nghiệm mới và thử lại.
- Nếu bạn có thể tái tạo vấn đề, hãy nhận xét một nửa mã còn lại và xem vấn đề còn tồn tại không.
- Lặp lại quy trình này cho đến khi bạn tìm thấy một chút cấu hình nhỏ nhất cần thiết để tái tạo vấn đề.
Nếu vấn đề của bạn là với một gói cụ thể, tất nhiên bạn sẽ phải để lại mã tải gói đó không bị thiếu.
Nếu tệp cấu hình của bạn tải các tệp khác, cuối cùng bạn cũng có thể mở rộng tìm kiếm của mình vào các tệp đó.
Tại thời điểm này, bạn có thể thấy rằng vấn đề là do chỉ một hoặc hai dòng mã. Bạn thậm chí có thể tự sửa nó. Nếu vậy, xin chúc mừng, bạn đã học được điều gì đó! Nếu không, di chuyển đến bước ba.
Bước 3: Cung cấp công thức sửa lỗi
Tại thời điểm này, bạn sẽ có thể cung cấp một công thức lỗi chi tiết để đăng ở đây. Nó nên bao gồm:
- Phiên bản Emacs của bạn (bạn có thể lấy bản này từ Emacs với
M-x emacs-version
- Hệ điều hành của bạn (phân phối Windows #, Mac, Linux)
- Phiên bản của gói bạn đang vật lộn với, nếu có
- Các bước cụ thể cần thiết để chứng minh vấn đề, bao gồm cả những gì bạn dự kiến sẽ xảy ra và những gì thực sự xảy ra .
Ví dụ, tôi có thể đăng một câu hỏi như thế này:
Tôi đang gặp vấn đề với siêu chế độ. Khi tôi sử dụng M-x sm-compile-code
, nó rút tiền từ tài khoản PayPal của tôi.
Các bước để tái sản xuất:
Tải siêu chế độ:
(require 'package)
(setq package-load-list
'((super-mode t)))
(package-initialize)
- mở một tập tin mới với
C-x C-f my-code
- nhập một dòng mã:
10 goto 10
- gọi điện
M-x sm-compile-code
Tôi hy vọng điều này sẽ gọi siêu biên dịch và biên dịch chương trình của tôi. Thay vào đó, tôi thấy một thông báo trong xe buýt nhỏ "$ 100 được chuyển từ paypal sang tác giả siêu chế độ"
GNU Emacs 25.1.50.3
Debian Linux
Phiên bản siêu chế độ 3.1415
1 Gói Bug Hunter có thể giúp bạn điều này, (bán) tự động chia đôi tệp init của bạn.
emacs -Q
như bước đầu tiên. Tôi đã viết nó lên như một cái gì đó để liên kết những câu hỏi đó với tư cách là trợ giúp chung cho người dùng mới.