評価を中断し、emacs-lispデバッガーで現在のスタックを観察しますか?


17

メジャーモードフックなどのemacs-lisp関数の実行に予想よりも長い時間がかかっている場合、それを中断して現在のスタックを確認したいことがあります。理想的には、デバッガーで変数値などを見ることもできるようにしたいです。私は意図的にemacs-lispモードで実行しているコードについてではなく、emacsの通常の操作で実行されるコードについて話している。

emacsでemacs-lispコードの実行を直接中断するにはどうすればよいですか?どの関数をデバッグする必要があるかは事前にはわかりません。

たとえば、を入力するとC-g、実行が中断されますが、どの機能が中断されたかについても何もわかりません。

回答:


18

C-gオンにすると、デバッガーをトリガーできますdebug-on-quit。ただやる

M-x toggle-debug-on-quit

これで、ヒットC-gするたびに、何が起こっていたのかを追跡できます。このバックトレースはインタラクティブなので、を使用して関数をステップ実行し続けることができd、で移動を開始できますc。(試してみてください。読むよりも見やすいです)。

これは、(debug)コード内に追加することで得られるのと同じバックトレースです。ここだ短いブログ記事 その上、及び関連のelispマニュアルページが


(おとなしく言うhello);)デバッガーがインタラクティブであるという素晴らしいメモ–私はそれをチェックするつもりはなかった:)
ショーン・

@SeanAllredはい、ほんの数週間前に見つけました。
マラバルバ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.