プログラムが無限にループしてリターンできないとき、最初の問題はそのループをいかに停止するかです。ほとんどのオペレーティングシステムでは、(quitさせる)C-gでこれを行うことができます。quitを参照してください。
普通のquitでは、なぜそのプログラムがループしたかについての情報は与えられません。変数debug-on-quit
に非nil
をセットすることにより、より多くの情報を得ることができます。無限ループの途中でデバッガを実行すれば、デバッガからステップコマンドで先へ進むことができます。ループ全体をステップで追えば、問題を解決するために十分な情報が得られるでしょう。
C-gによるquitはエラーとは判断されないので、C-gのハンドルにdebug-on-error
は効果がありません。同じようにdebug-on-quit
はエラーにたいして効果がありません。
この変数はquit
がシグナルされて、それがハンドルされていないときにデバッガを呼び出すかどうかを決定する。debug-on-quit
が非nil
なら、quit(つまりC-gをタイプ)したときは常にデバッガが呼び出される。debug-on-quit
がnil
(デフォルト)なら、quitしてもデバッガは呼び出されない。