センチネルおよびフォントロック中のエラーをデバッグする方法


10

プロセスセンチネル内またはフォントロック中にエラーが発生すると、debug-on-error以前は有効にされていたとしても、Emacsはバックトレースを表示しません。

これらのエラーがキャッチされる理由を理解しています。バックトレースを表示しようとすると、同じエラーが再度トリガーされる可能性があります。ただし、実際にそのエラーをデバッグする場合、あまり役に立ちません。私はEmacsがこれから作業しなければならないよりも応答しなくなる危険を冒したいのです。

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

結局のところ、最初のインスタンスがクレイジーになった場合は、2番目のインスタンスを開始することができます。センチネルで理論的にこのようなエラーが発生する可能性のある場所がたくさんある場合は、もう少しコンテキストが役立ちます。

それでdebug-on-error、効果がない場合でもEmacsにバックトレースを表示させるにはどうすればよいですか?


1
emacs.stackexchange.com/questions/3552/…を見てきましたが、特定の1つのケースだけではなく、これに関する一般的な質問があると思います。また、「printfを使用する」が唯一の回答ではないことを願っています。これは私が過去に使用したものであり、特にエラーが「無効な顔の参照:some-face-which-i-absolutely-know」の場合は、満足のいくものではありません。 -exists "、これは私がインストールしたほとんどすべてのパッケージによって引き起こされる可能性があります。
tarsius 2014年

このURLはこの質問を指しているため、コメントではやや混乱していますが、意図的なものですか、それともエラーですか?
wasamasa 2014年

それが私が意味した問題です:ttp://emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius

リンクtarsiusが意図したもの:emacs.stackexchange.com/questions/1045/…‌ ug-init-has-no-effect
dcorking

回答:


10

プロセス監視の場合、私には正当な理由はないと思います。IOW機能が不足しているだけだと思う​​ので、をお勧めしますM-x report-emacs-bug

font-lockの場合、問題はよりトリッキーです。なぜなら、実際に発生するのは、エラーがjit-lock中、つまり再表示中にトリガーされ、その時点でデバッガーに簡単に入ることができないためです(IIRCはある時点でGerdが作成しようとしましたそれは機能しますが、いくつかの深刻な問題がまだありました)。したがって、次のいずれかの方法でデバッグできます。

  • M-x jit-lock-debug-mode これにより、jit-lockが再表示の直後に実行されるように変更され、デバッガーに入ることができます。
  • M-: (setq font-lock-support-mode nil) RETそして、フォントロックを無効にして再度有効にします。このようにして、font-lockはjit-lockを使用しなくなり、その後の再表示ではなく、ユーザーのコマンド中に実行されます。

実際にdebug-on-errorは、プロセスセンチネルでは問題なく動作するようです。
ステファン

@tarsius-debbugsの問題へのリンクを投稿してください
2015

tarsiusの機能リクエストは19432で、再生不可のタグが付けられています。Stefan Monnierが、では--evalなくを使用する回避策を投稿しました--debug-init 。また、彼の回避策は、私が実際のバックトレースに落ちるのを助けません.emacs.d
15

1
@dcorking:いいえ、バグ#19432では「回避策」を投稿しませんでしたが、彼のバグの再現に失敗しました。問題を再現するレシピを送ってみませんか?
ステファン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.