2009-08-29 20 views
5

私はEmacsのメジャーモードを開発しています。たとえば、フォントの表示が行われたときにソースコードにブレークポイントを設定する方法はありますか?Emacs Lispメジャーモードのデバッグ

答えて

7

ステップ実行したい機能のLispソースを見つけてそこにM-x edebug-defunと入力します。その後、その関数が実行されるたびに自動的にEdebugに配置され、必要に応じてステップを実行することができます。

奇数回で呼び出すことができるので、フォント機能はややこしいことがあります。 message関数を使用して、メッセージを*Messages*バッファに書き込むことができます。もう1つのトリックは、Font Lockをオフにして(機能が自動的に呼び出されないように)、デバッグしている関数をedebug-defunで準備し、それを手動で呼び出すことです。 (M-:(a.k.a. eval-expression)を使用して非インタラクティブ機能を呼び出すことができます)。

+0

はい、これは私のインデントのために動作します。「ブレークポイント*についてのあなたの質問に答えるためにとにかく

、あなたが警告したように、フォント化機能ではなく警告します!ありがとう。 – Alex

4

デバッグ用マニュアルelispはfound hereです。上述したよう

あなたはedebugを使用することができ、またありますM-Xデバッグ・エントリーに、あなたは(setq debug-on-quit t)を設定することができます。リンク内のすべてのオプションをチェックしてください。どのように猫をスキンにしたいのかによって異なります。

2

他のプログラミング言語と同様に、printステートメントでデバッグできます。 (message "here, foo=%d" foo)はあなたの友人です。 (おそらくこれらのメッセージは*Messages*バッファに蓄積されているので、あまりにも速く進むと問題にはなりません)。trace-functionも役に立ちます。

私はたくさんのemacsモードを書いており、デバッガはめったに必要ありませんでした。通常、この問題は、よく配置されたいくつかの印刷ステートメントで公開されます。

+0

原則として、デバッガは栄光の「挿入印刷ステートメント」マシンですが、コード自体を損なわずに自動化します。私はelispの機能をデバッグするのに便利です – Alex

0

また、いくつかのlispスニペットをすばやくデバッグしたい場合は、ielmモードを使用したい場合もあります。これは、たとえばpython対話モードのように動作します。

1

edebugの代わりにdebugを使用できます。関数の入力時にデバッガを開くには、M-x debug-on-entry THE-FUNCTIONを使用します。または、関数debugの呼び出しをソースコードに挿入して、ブレークポイントとして機能させます(コードの再評価)。

しかし実際には、再表示などの奇妙な時間にフォントが実際に発生します。実際にフォント化プロセスをデバッグする必要がある場合は、正規表現だけでなく関数をfont-lock-keywordsに使用できます。

しかし実際には、フォントロックのデバッグの問題について具体的に説明する必要があります。通常、人々は(a)font-lock-keywords(構造)を理解し、(b)彼らが望むものと一致しない正規表現を持っているという問題があります。 。はい、ちょうどあなたがLispのソースコードにしたい任意の時点で(debug)を挿入し、デバッガはその時点で入力されます

関連する問題