2009-04-30 27 views
1

私はubuntuディストリビューションから取り出したemacs lispパッケージに問題があります。パッケージはJDEEであり、ファイルを開くたびに 'Args out of range:63'、0,4 'がミニバッファにあり、バッファがメッセージになります。この脆弱性は昨年9月に報告されたようだが、対策は講じられていない。私はemacs初心者ではなく、elispコードを自分で書いていますが、このようなことは一度もデバッグしようとはしませんでした。私は、このエラーが少なくともどこから問題が発生しているのアイデアを得るときに、デバッガでファイルのロードを停止したいと思います。 「エラー時にデバッガを入力する」のelispマニュアルのセクション18.1.1を読んだが、debug-on-error、debug-ignored-errors、およびdebug-onの値のさまざまな組み合わせで再生した後にファイルをロードしようとした-signalは効果がないようです。誰かが私の次のステップのための提案を持っていますか?実行中のEmacs Lispプログラムを中断する

+0

使用しているEmacsのバージョンと、コマンド、キーストロークまたはメニューバーの項目を使ってファイルを開く方法を教えてください。 –

+0

私はLaunchpadでこのバグを報告した人です。あなたは "私もあそこ"に追加してもらえますか?メンテナが注目してくれるかもしれませんか? https://bugs.launchpad.net/ubuntu/+source/cedet/+bug/264498 –

+0

もちろん、パッチを提出することも大丈夫です;-) –

答えて

6

debug-on-errorが機能しない場合は、ソース自体から開始します。問題を引き起こしているキーバインド/イベントを見つけて、関数を探します。今

C-h k <keystrokes> 
M-x find-function <function-name-from-above> 

あなたがソース

M-x edebug-defun 

そして、あなたはキーを打つ次回にされたら、あなたはプログラムをステップ実行することができるはずです。その時点で、どの部分がエラーを引き起こしているのかを知ることができ、その方法でドリルダウンすることができます。

変数'stack-trace-on-errorを設定して、原因を見つけることができます('debug-on-errorは通常、私にとってはうまくいきますが、どうしてそうでないのかわかりません)。

最後の手段として(edebug-defunが機能しない場合)、(debug)を呼び出してルーチンを再定義することができます。

0

JDEEが何らかの形でデバッグ時エラーを抑制しているとします。おそらく、エラーメッセージ「範囲外です」のファイルをgrepします。デバッグ中にの代わりに(load "foo.el")のようなコマンドを入力して、バイトコンパイルされた.elcファイルではなく、コンパイルされていない.elファイルをロードしてください(バイトコンパイル済みコードを実行している場合はデバッガで確認できます)。

-1

find-grepを使用しているときに誤って(current-time-string)を自分のスクリプトの1つに再定義しても同じエラーが発生しました。

上記のM-x edebug-defunヒントを使用すると、エラーを示すコードをステップ実行したときに、(current-time-string)の呼び出しを見て問題を見つけることができました。

あなたのケースでどの程度役立っているかわかりません。

+0

-1 "範囲外の引数"はかなり一般的なエラーです。さらに、問題の原因となるデバッガを起動する方法はありません。 – nschum

関連する問題