7

C#flymakeモジュール内のemaceselispでCPUスピンが発生しています。(Flymakeは、定期的にビルドを実行し、現在のバッファー内の構文エラーまたは警告を強調表示するemacsのモジュールです。)

スピンが発生する可能性のあるスポットを探すために、コードに足を踏み入れようとしています。

私がそれにいる間、誰かがスピンを理解するための提案がありますか?emacsに実行を停止して、どこで停止したかを確認できるものはありますか?

4

4 に答える 4

9

M-x set-variableに設定debug-on-quitするために使用しtます。次に、問題が発生したときにヒットC-gすると、デバッガーは停止したときに実行されていたもののバックトレースを提供します。

于 2010-11-15T04:52:18.767 に答える
5

Flymakeは、flymake-modeが有効になっているバッファーごとに1秒のタイマーを設定して、バッファーが2flymake-no-changes-timeout秒以上前に変更されているかどうかを確認します。

flymakeモードで多くのバッファー(数百)を開いている場合、これは驚くほど大量のCPUをむさぼり食う可能性があります。これを修正する単一のグローバルタイマーを備えた、パッチを適用したバージョンのflymakeと、その他のいくつかの問題があります。 :https ://github.com/illusori/emacs-flymake

これはあなたにとって同じ問題ではないかもしれませんが、私にとっては、600ファイルを開いた状態でデスクトップモードで開くとEmacsがロックされ、15分ごとに1回のキー押下が処理されるのは幸運です。

于 2011-08-02T23:18:28.980 に答える
2

OS XIでも同様の問題が発生し、新しいファイルを開くときにflymakeがemacsをハングさせていました(開いているバッファーが少ない場合でも)。GUI全体がロックされたため、有効にしても効果debug-on-quitはありませんでした。

gdbをemacsにアタッチすると、次のようになります。

$ gdb -p `psgrep emacs`
(gdb) bt
#0  0x00007fff98954e42 in __semwait_signal ()
#1  0x00007fff8e5d1dea in nanosleep ()
#2  0x00007fff99e3af05 in +[NSThread sleepUntilDate:] ()
#3  0x000000010015d917 in -[EmacsDialogPanel runDialogAt:] ()
#4  0x000000010015fa1f in ns_popup_dialog ()
[...]

そのため、ロックアップは、「実行中に構成エラーが発生しました...」などのダイアログメッセージが原因で発生しました。

問題を説明するこの投稿から、次のようにしてこれらのポップアップメッセージを無効にすることができます。

ただし、Emacsがハングする場合があります。OS Xの赤/黄/青の閉じる/最小化/ズームボタンは、Emacsがフォーカスを失ったかのように灰色に変わりますが、実際にはアクティブなアプリケーションです。タスクを切り替えてEmacsに戻しても、回復しません。Command-Qで終了することはできません。

最終的にあきらめてそれを殺して再起動すると、作業とシェルが失われ、最近のファイルのリストが保存されません。

(setq flymake-gui-warnings-enabled nil)

これにより、flymakeが自動的にオフになっていることを警告するのを防ぎますが、他の方法よりも優れています。

flymake-display-warningはEmacの「message-box」関数を呼び出すため、同じ問題を引き起こす他のツールが存在する可能性があります。

ジェネリック変数use-dialog-boxもありますが、デフォルトのtからnilに設定しても、flymakeでは役に立ちませんでした。defadviceを使用してy-or-no-pとyes-or-no-pをuse-dialog-boxをnilに設定するようにインターウェブに提案することもありますが、これもフライメイクには役立ちません。それらの関数を使用します。

于 2012-03-27T07:41:20.603 に答える
0

http://www.gnu.org/s/emacs/manual/html_node/elisp/Debugging.htmlが役立つかもしれません

于 2010-11-14T19:45:57.413 に答える