Gỡ lỗi tốt hơn của Emacs bị rơi?


9

Mặc dù Emacs (24.3.93.1) chạy tốt nếu được khởi chạy từ Finder, nếu phiên bản đầu cuối được khởi chạy:

/Applications/Emacs.app/Contents/MacOS/Emacs -nw

Emacs gặp sự cố với:

Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw.

Có vẻ như sự cố được gây ra bởi một dòng duy nhất trong init.el,

(set-face-attribute 'default nil :font "Menlo-16")

Nếu dòng đó được nhận xét, phiên bản đầu cuối của Emacs cũng sẽ bắt đầu tốt.

Để xác định nguyên nhân của sự cố, tôi đã mất vài giờ (giảm init.el một nửa).

Tôi biết rằng trong mọi trường hợp, Emacs sẽ kế thừa bất kỳ phông chữ và kích thước phông chữ nào được chỉ định trong ứng dụng đầu cuối (về cơ bản, dòng đó không có ý nghĩa trong cli.)

  1. Nói chung, có cách nào tốt hơn để gỡ lỗi một Emacs bị rơi không? Có lẽ sử dụng một số loại trình gỡ lỗi cli sẽ in một thông điệp mô tả hơn?
  2. Tại sao dòng đó bị sập Emacs thông qua cli, nhưng không được khởi chạy từ Finder?

nó thực sự ra mắt từ cli? hoặc khởi chạy phiên bản đầu cuối gây ra vấn đề? Hãy thử đặt một số lỗi bắt xung quanh thuộc tính set-face? (lỗi trường hợp điều kiện (thuộc tính khuôn mặt ...) (lỗi (thông báo "Rất tiếc!")))
nic ferrier

3
Nộp báo cáo lỗi. Emacs không bao giờ bị sập do mã lisp. Nhưng đây có thể là một vấn đề với bản dựng cụ thể mà bạn đang sử dụng, đây có phải là bản phát hành chính thức không?
Malabarba

@ nic-ferrier: Bây giờ tôi chỉ có một dòng trong init.el, (condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))tôi vẫn gặp sự cố với cùng một thông báo lỗi. Không có thông điệp có nguồn gốc bổ sung.
gsl

@ malabarba: Tôi đã thử GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.orgtừ emacsformacosx.com và Emacs không gặp sự cố. Vì vậy, nó phải là một lỗi trong các phiên bản sau. Tôi sẽ nộp một báo cáo lỗi.
gsl

1
Như @Malabarba đã chỉ ra: Gửi báo cáo lỗi (ngay lập tức) : M-x report-emacs-bug. Các nhà phát triển Emacs sau đó sẽ dẫn bạn đi qua những gì bạn có thể làm để giúp gỡ lỗi vấn đề.
vẽ

Câu trả lời:


6

Để giúp bạn theo dõi lần sau

Điều này đã xảy ra với tôi trước đây. Có một tình huống khiến string-to-intEmacs bị rơi, và tôi cũng phải mất hàng giờ để xác định chính xác.
Xin lỗi, tôi không thể cung cấp câu trả lời hay hơn, nhưng các sự cố Emacs xảy ra sâu trong mã C và không có bất kỳ công cụ tích hợp nào có sẵn để theo dõi các vấn đề như vậy.

Tôi cho rằng việc gỡ lỗi với nó gdblà có thể, nhưng hiệu quả của nó sẽ phụ thuộc vào mức độ thành thạo của bạn gdb.

Những gì bạn thực sự cần làm là

Nộp báo cáo lỗi

Mã elisp thuần túy (không được biên dịch byte) không bao giờ được cho là để phá vỡ Emacs. Nó có thể gây ra treo (do một số vòng lặp vô hạn) và nó có thể khiến Emacs hết bộ nhớ. Nhưng, ngoài điều đó, bất kỳ sự cố là một lỗi .

M-x report-emacs-bug

Chỉ cần cung cấp ví dụ hoạt động tối thiểu này mà bạn đã đưa ra, cùng với một mô tả về bản dựng và hệ thống của bạn, sẽ đủ giúp cho các nhà phát triển tốt bụng.


2
Sử dụng gdb sẽ là cách duy nhất. Chúng ta có thể thêm công cụ vào Emacs để bọc mọi cuộc gọi C trong một thứ gì đó sẽ tự bắt nhưng điều đó sẽ luôn ở trên đầu. Emacs không được phép gặp sự cố, nếu có, chúng ta nên xử lý cụ thể lỗi đó để nó không còn nữa. Vì vậy, yeah, nếu nó bị hỏng, báo lỗi. Sử dụng gdb bằng mọi cách để tìm ra lỗi hoàn toàn.
nic ferrier

4

Là một tham chiếu để gỡ lỗi với gdb, bạn sẽ muốn sử dụng src / temacs từ cây xây dựng. Đây là Emacs mà không có elisp đổ trước gây nhầm lẫn cho trình gỡ lỗi.

gdb --args src/temacs -nw

1
Cảm ơn bạn, lời khuyên tuyệt vời (và không dễ dàng quá tìm thấy xung quanh, quá). Cảm ơn.
gsl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.