web-dev-qa-db-ja.com

elispをデバッグする方法は?

通常、デバッグする最も簡単な方法は、printfを使用することです。 emacs-lispをデバッグするにはどうすればよいですか? elispからemacsエディタに何かを印刷するにはどうすればよいですか?またはelispコードをデバッグする方法はありますか?

たとえば、次のコードが.emacsファイルで実行されているかどうかを確認するにはどうすればよいですか?

(load "auctex.el" nil t t)
54
prosseek

デバッガ(edebug)の使用は非常に簡単です。関数の定義に移動し、次のように入力します M-x edebug-defun。次に呼び出されたときに、他のすべてのデバッガーと同様にコードをステップ実行できます。タイプ ? キーバインドのリストについては、または edebug のドキュメントを確認してください。

68
Trey Jackson

GNU Emacsには2つのデバッガがあります:

  • edebug-ここの別の投稿で説明されています
  • デバッグ

debugを使用しています。これらは一般的なエントリポイントです(使用する方法)。

  • M-x debug-on-entryの後に、デバッガーを使用して入力する関数が続きます。

  • M-x toggle-debug-on-error-エラーが発生したときにデバッガーに入ります。

  • M-x toggle-debug-on-quit-ユーザーがヒットしたときにデバッガに入ります C-g
  • 関数debugへの明示的な呼び出しをコードの特定の場所(ブレークポイント)に配置し、それらの場所にデバッガーを入力します。
(デバッグ)

次を使用してデバッガをステップ実行します d、または c 特定の評価の詳細をスキップします。

30
Drew

これは値の印刷に役立ちます

(message "Hello (%s)" foo)

しかし、データ構造ではうまく機能しません。そのためには、

(prin1 list-foo)

または(prin1-to-string)を(メッセージ)に埋め込みます。

14
jplindstrom

デバッグする最も簡単な方法は、コードをインタラクティブに実行することです。 LISPバッファーでこれを行うには、式の後にポイントを配置して実行します。 C-x C-eeval-last-sexp)。

または:

(message "hello world")

C-h f message 組み込みのメッセージ関数の詳細をご覧ください。大量のメッセージを生成する場合は、変数message-log-maxをより大きな値にカスタマイズできます。

7
Dave Bacher

質問に1つずつ回答するには:

  • 何かを印刷する:百万通りの方法があります。 (メッセージ "Hello")は、文字列をエコー領域に配置します。 ( "hello"を挿入)は、文字列を現在のバッファのポイントに置きます...
  • 次のコードが実行されているかどうかを確認するにはどうすればよいですか: "auctex.el"を(たとえば) "frotzumotzulous"(つまり、実際のファイルを指定しない限り、すべての文字列)に置き換えるだけです。エラーメッセージが表示されるかどうかを確認します。エラーが発生しない場合、そのコードは実行されていません。
3
offby1