2010-11-14 18 views
7

Tôi đang nhận được một vòng quay CPU trong emacs elisp, trong mô-đun flymake C#. (Flymake là mô-đun trong các emacs định kỳ chạy một bản dựng, sau đó làm nổi bật bất kỳ lỗi cú pháp hoặc cảnh báo nào trong bộ đệm hiện tại.)Có một mẹo để gỡ lỗi một spin trong emacs elisp, trong một mô-đun flymake?

Tôi sắp thâm nhập vào mã, để tìm các vị trí có thể xảy ra .

Trong khi tôi ở đó, có ai có đề xuất để tìm ra spin không? Có cái gì đó trong emacs cho phép tôi ngừng thực hiện và xem nó dừng lại ở đâu?

Trả lời

9

Sử dụng M-x set-variable thiết debug-on-quit-t. Sau đó, khi sự cố xảy ra, hãy nhấn C-g và trình gỡ lỗi sẽ cung cấp cho bạn một backtrace về những gì đang chạy khi bạn dừng nó.

+0

Ngoài ra còn có M-x toggle-debug-on-quit. –

5

Flymake đặt bộ hẹn giờ 1 giây cho mỗi bộ đệm đã bật chế độ flymake, để kiểm tra xem bộ đệm đã được sửa đổi hơn flymake-no-changes-timeout giây trước đây chưa.

Nếu bạn có nhiều bộ đệm mở (vài trăm) trong chế độ flymake thì điều này có thể tiêu tốn một lượng lớn CPU đáng kinh ngạc, tôi có một bản flymake được vá có một bộ hẹn giờ toàn cầu. một số vấn đề khác: https://github.com/illusori/emacs-flymake

Điều này có thể không phải vấn đề tương tự đối với bạn, nhưng đối với tôi, nó sẽ khóa Emacs khi mở ở chế độ máy tính để bàn với 600 tệp đang mở, tôi sẽ may mắn nhận được một phím bấm được xử lý mọi 15 phút.

+0

Cảm ơn, Sam, trông rất hữu ích, tôi sẽ thử nó. – Cheeso

2

Trên OS X Tôi gặp vấn đề về âm thanh tương tự khi flymake treo các emacs khi mở một tệp mới (ngay cả khi chỉ có một vài bộ đệm mở). Bật debug-on-quit không giúp được gì vì toàn bộ GUI bị khóa.

Gắn gdb để emacs trở như sau:

$ gdb -p `psgrep emacs` 
(gdb) bt 
#0 0x00007fff98954e42 in __semwait_signal() 
#1 0x00007fff8e5d1dea in nanosleep() 
#2 0x00007fff99e3af05 in +[NSThread sleepUntilDate:]() 
#3 0x000000010015d917 in -[EmacsDialogPanel runDialogAt:]() 
#4 0x000000010015fa1f in ns_popup_dialog() 
[...] 

Vì vậy, các nhà giam là do nhắn thoại nói "đã xảy ra lỗi cấu hình trong khi đang chạy ..." hoặc tương tự

Từ this post describing the problem, bạn có thể tắt các thông báo bật lên này với các thông tin sau:

Đôi khi, Emacs chỉ bị treo. Nút OS X màu đỏ/vàng/xanh đóng/thu nhỏ/thu phóng chuyển sang màu xám như thể Emacs đã mất tiêu điểm, nhưng thực tế là ứng dụng đang hoạt động. Chuyển đổi các nhiệm vụ xung quanh và quay trở lại Emacs không phục hồi nó. Bạn không thể Command-Q bỏ nó.

Khi bạn cuối cùng đã từ bỏ và giết nó và khởi động lại, bạn đã mất công việc, vỏ của bạn và nó không lưu danh sách các tệp gần đây.

(setq flymake-gui-warnings-enabled nil) 

Điều này ngăn ngừa tình trạng flymake cảnh báo bạn rằng nó tự tắt, nhưng tốt hơn thay thế.

Cảnh báo flymake-display-gọi hàm 'hộp thư' của Emac để có thể có các công cụ khác gây ra cùng một vấn đề.

Ngoài ra còn có một biến chung sử dụng-hộp thoại nhưng đặt nó từ mặc định t đến nil không giúp đỡ với flymake.Ngoài ra còn có một gợi ý về interwebs để sử dụng defadvice để nói y-or-no-p và yes-or-no-p set use-dialog-box thành nil, nhưng một lần nữa, điều này sẽ không giúp flymake vì nó không sử dụng các chức năng đó.

Các vấn đề liên quan