Cách gỡ lỗi trong sentinels và trong khi khóa phông chữ


10

Khi xảy ra lỗi bên trong một quá trình được gửi hoặc trong quá trình khóa phông chữ, thì Emacs không hiển thị một backtrace mặc dù debug-on-errorđã được bật trước đó.

Tôi hiểu lý do tại sao các lỗi này bị bắt, lỗi tương tự có thể được kích hoạt lại trong khi cố gắng trình bày backtrace. Tuy nhiên khi tôi thực sự muốn sửa lỗi đó thì nó không hữu ích lắm. Tôi thà mạo hiểm Emacs trở nên không phản hồi hơn là phải làm việc từ đây:

error in process sentinel: Wrong type argument: stringp, nil

Sau tất cả, tôi chỉ có thể bắt đầu một ví dụ thứ hai, nếu lần đầu tiên bắt đầu phát điên. Một chút bối cảnh sẽ có ích khi có nhiều nơi mà một lỗi như vậy về mặt lý thuyết có thể xảy ra trong một trọng điểm.

Vậy làm thế nào tôi có thể buộc Emacs hiển thị một backtrace ngay cả trong trường hợp debug-on-errorkhông có hiệu lực?


1
Tôi đã thấy emacs.stackexchange.com/questions/3552/ trên nhưng nghĩ rằng nên có một câu hỏi về điều này nói chung, không chỉ một trường hợp cụ thể. Ngoài ra tôi thực sự hy vọng "use printf" không phải là câu trả lời duy nhất, bởi vì đó là những gì tôi đã sử dụng trong quá khứ và nó không thỏa mãn, đặc biệt nếu lỗi là "Tham chiếu khuôn mặt không hợp lệ: một số khuôn mặt mà tôi hoàn toàn biết -exists ", có thể được kích hoạt bởi khá nhiều gói tôi đã cài đặt.
tarsius

URL trỏ đến câu hỏi này và do đó khá khó hiểu trong nhận xét của bạn, đó là lỗi cố ý hay lỗi thay cho bạn?
wasamasa

Đó là vấn đề tôi muốn nói: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius

liên kết tarsius dự định: emacs.stackexchange.com/questions/1045/... ug-init-có-no-hiệu quả
dcorking

Câu trả lời:


10

Đối với các trọng điểm quá trình, tôi không nghĩ có một lý do chính đáng. IOW Tôi nghĩ rằng nó chỉ là một tính năng bị thiếu, vì vậy tôi đề nghị bạn M-x report-emacs-bug.

Đối với khóa phông chữ, vấn đề khó khăn hơn vì điều thực sự xảy ra là lỗi được kích hoạt trong quá trình khóa jit, tức là trong khi hiển thị lại và chúng tôi không thể dễ dàng nhập trình gỡ lỗi vào lúc đó (IIRC tại một số điểm mà Gerd đã cố gắng thực hiện nó hoạt động, nhưng có một số vấn đề nghiêm trọng, vẫn còn). Vì vậy, bạn có thể gỡ lỗi nó theo một trong các cách sau:

  • M-x jit-lock-debug-mode thay đổi jit-lock để chạy ngay sau khi hiển thị lại, để chúng ta có thể vào trình gỡ lỗi.
  • M-: (setq font-lock-support-mode nil) RETvà sau đó vô hiệu hóa + khóa phông chữ reenable. Cách khóa chữ này không sử dụng jit-lock nữa, vì vậy nó chạy trong lệnh của người dùng hơn là trong lần hiển thị lại sau đó.

Trên thực tế, debug-on-errordường như hoạt động tốt trên quá trình canh gác.
Stefan

@tarsius - vui lòng gửi một liên kết đến vấn đề gỡ lỗi của bạn
dcorking

Yêu cầu tính năng của tarsius là 19432 trong đó nó được gắn thẻ là không thể thực hiện được. Stefan Monnier đã đăng một cách giải quyết có sử dụng --evalchứ không phải --debug-init . Ngoài ra, cách giải quyết của anh ấy không giúp tôi rơi vào tình trạng lạc hậu trong thực tế của mình.emacs.d
việc

1
@dcorking: không, trong lỗi # 19432, tôi đã không đăng "cách giải quyết" nhưng không thành công trong việc tái tạo lỗi của anh ấy. Tại sao bạn không gửi một công thức để tái tạo vấn đề của bạn?
Stefan
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.