2009-08-29 46 views
5

Tôi đang phát triển một chế độ chính cho Emacs. Có cách nào để tôi có thể thiết lập một điểm ngắt trong mã nguồn khi việc phông chữ xảy ra không?Gỡ lỗi Emacs Lisp chế độ chính

Trả lời

7

Tìm nguồn Lisp của hàm bạn muốn xem qua và nhập M-x edebug-defun tại đó. Sau đó, bất cứ khi nào chức năng đó được thực hiện, bạn sẽ tự động được đặt vào Edebug, nơi bạn có thể bước qua nó nếu bạn muốn.

Chức năng phông chữ có thể hơi phức tạp một chút, vì chúng có thể được gọi vào các thời điểm lẻ. Bạn có thể sử dụng chức năng message để viết tin nhắn vào bộ đệm *Messages*. Một mẹo khác là tắt Font Lock (vì vậy chức năng của bạn không được gọi tự động), sau đó chuẩn bị hàm bạn đang gỡ lỗi với edebug-defun và gọi nó theo cách thủ công. (Lưu ý rằng bạn có thể sử dụng M-: (a.k.a. eval-expression) để gọi hàm không tương tác.)

+0

Vâng, đây làm việc cho thụt lề của tôi.. – Alex

4

Hướng dẫn gỡ lỗi có thể là found here.

Bạn có thể sử dụng edebug như đã đề cập, cũng có Gỡ lỗi M-x-on-entry và bạn có thể đặt (setq debug-on-quit t). Kiểm tra tất cả các tùy chọn trong liên kết, tất cả phụ thuộc vào cách bạn muốn da mèo.

2

Và cũng giống như trong bất kỳ ngôn ngữ lập trình nào khác, bạn có thể gỡ lỗi bằng lệnh in. (message "here, foo=%d" foo) là bạn của bạn. (Bạn có thể biết rằng những thông điệp này được tích lũy trong bộ đệm *Messages*, vì vậy nếu chúng đi quá nhanh, đó không phải là vấn đề.) trace-function cũng hữu ích.

Tôi đã viết rất nhiều chế độ emacs và chỉ hiếm khi cần trình gỡ lỗi. Thông thường vấn đề sẽ tự phơi bày với một vài câu lệnh in được đặt đúng vị trí.

+0

Về nguyên tắc, một trình gỡ rối chỉ là một máy 'chèn-in-tuyên bố' được tôn vinh, nhưng nó tự động hóa tác vụ cho bạn, trong khi không làm hỏng chính mã đó Và tôi sẽ thấy rằng chức năng hữu ích để gỡ lỗi chức năng elisp tôi đang viết, đặc biệt là tôi khá mới để elisp – Alex

0

Trên một lưu ý khác là tốt nếu bạn muốn chỉ nhanh chóng gỡ lỗi một số đoạn lisp bạn có thể muốn sử dụng chế độ ielm cũng hoạt động như ví dụ như chế độ tương tác python.

1

Thay vì edebug bạn có thể sử dụng debug. Để mở trình gỡ rối khi nhập vào một hàm, hãy sử dụng M-x debug-on-entry THE-FUNCTION. Hoặc chèn các cuộc gọi đến chức năng debug trong mã nguồn để phục vụ như các điểm ngắt (đánh giá lại mã).

Tuy nhiên, phông chữ thực sự diễn ra vào những thời điểm kỳ lạ, liên quan đến hiển thị lại, v.v. Nếu bạn thực sự cần gỡ lỗi quá trình phông chữ, thì bạn có thể sử dụng các hàm, không chỉ regexps, trong font-lock-keywords.

Nhưng thực sự bạn sẽ cần phải cụ thể hơn về các vấn đề gỡ lỗi khóa phông chữ của mình. Thông thường, những vấn đề mà mọi người gặp phải là (a) hiểu được font-lock-keywords (cấu trúc) và (b) regexps không khớp với những gì họ muốn.

Dù sao, để trả lời câu hỏi của bạn về * breakpoint ": Vâng, chỉ cần chèn (debug) tại bất kỳ điểm nào bạn muốn trong mã nguồn Lisp Các debugger sẽ được nhập vào thời điểm đó

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