2016-03-24 13 views
2

emacsセッションでグローバルデバッグモードを初めてトグルし、無効なlispを実行しようとすると、バックトレースウィンドウがポップアップします。しかし、このウィンドウを閉じてバックトレースバッファを削除し、別の無効なelispを実行しようとすると、バックトレースバッファが作成されなくなり、ウィンドウがポップアップしなくなります。私はこのマニュアルを見て、なぜこのようなことが起こっていないのかを理解しようと試みました。どんな助けも大いに評価されるでしょう。Elispデバッガがポップアップしない

+2

おそらくあなたはまだ 'recursive-edit'にいるでしょう。これは、通常、' ['と'] 'によってモード行に表示されます。 'backtrace *'バッファが再び現れる前に 'recursive-edit'を終了する必要があります。 '(トップレベル)'を評価すると、デバッガを正常に終了するための他の方法があります。 – lawlist

+0

ありがとう!それは確かに問題でした。私は再帰的な編集を読む必要があります。これはqを押すのではなくバッファを殺すと起こります。そのため、キーがローカルにバインドされて再帰的な編集を終了するということを想定しています。 –

+0

'debugger-mode-map'のキーを見るには、ポイントが' * Backtrace * 'バッファにある間に' M-x describe-mode RET'と打ちます。あるいは、 'M-x記述変数RETデバッガ - モードマップRET 'とタイプすると、いつでもそれを見ることができます。この特定の例では、 'q'は'トップレベル 'に束縛されています。関数exit-recursive-editは1つのレベルから抜け出すだけです。アクティブなレベルがたくさんあります。関数 'abort-recursive-edit'はすべてのレベルから抜けるでしょう。トップレベルの関数には、次のようなドキュメント文字列があります。 "*すべての再帰的な編集レベルを終了します。これにより、アクティブなミニバッファもすべて終了します。" " – lawlist

答えて

2

問題は、あなたがジャンプを回避するように、さらにデバッグが(無効になっている再帰編集中にまだいるよう*Backtrace*バッファを殺すことは、実際に、あなたは(cまたはqを打つに反して)デバッガを残すことはありませんということですさらにデバッガのデバッグに入ります)。

この状況を回避するには、C-]を使用することをおすすめします。しかし、バックトレースバッファーが強制終了されたときにデバッガーを終了することが理にかなっているので、これをM-x report-emacs-bugと書いておくことをお勧めします。

+0

+1。また、(1)現在の再帰的編集がバックトレースバッファである場合は、 'C-x 4 b * Backtrace *'を使用してそれを参照することができます。 (2) 'M-x top-level'はすべてのレベルの再帰的編集から抜け出し、トップレベルに移動します。 – Drew

関連する問題