回答:
に頼る前にgdb
、Unix-yオペレーティングシステムを使用している場合は、他の回答に記載されてSIGUSR2
いるDEBUG
ファイルに記載されているように、Emacsプロセスに送信してみてください。
$ kill -SIGUSR2 <emacs_pid_goes_here>
これにより、Emacsは現在のループからLispデバッガーへのブレークを試みます。
または、emacs pidを手動で入力せずにこの1つのライナーを使用します。
$ ps aux | grep -ie emacs | grep -v grep | awk '{print $2}' | xargs kill -SIGUSR2
または、killall
利用可能な場合:
$ killall -USR2 emacs
/
検索するemacs
とk
、信号を送信します。Macのアクティビティモニターでも実行できます(メニューから:[表示] | [信号をプロセスに送信])。
を押したときにフリーズが解消した場合C-g
は、組み込みのデバッガーを使用できます。M-x toggle-debug-on-quit
メッセージを送信する前に入力し、C-g
フリーズしたらヒットし、表示される*Backtrace*
バッファーを調べます。
解決C-g
しない場合、おそらくCコードでフリーズが発生しているため、などの外部デバッガーを使用する必要がありますgdb
。それを行う方法についてのヒントを提供C-h C-d
するDEBUG
ファイルを見るためにヒットします。(EmacsリポジトリーのWebインターフェースでDEBUGファイルを読むこともできます。) この答えはgdb
、Emacsでの使用方法についての詳細です。
C-g
数回ヒットする必要がある場合がありますC-g C-g C-g
。
M-x debug-on-entry THE-COMMAND
、次にを使用してデバッガーをステップ実行しますd
(または場合c
によってはいくつかのステップをスキップします)。ソースコードを別のフレームで開いたままにしておくと、デバッガーが実行していることを追跡できます。ここに表示される内容を報告するか、Emacsのバグを示唆していると思われる場合は、を使用してくださいM-x report-emacs-bug
。