GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Using-Edebug.html ・ emacs-doc.conao3.com

19.2.1 Edebugの使用

EdebugでLispプログラムをデバッグするには、まずデバッグ対象のLispコードをインストルメントする必要があります。簡単な方法は、まずポイントを関数やマクロの定義内に移動させ、次にC-u C-M-x(プレフィックス引数を指定する場合はeval-defun)を実行することです。コードをインストルメントする別の方法については、Edebugのためのインストルメンテーションを参照してください。

関数にインストルメンテーションを施すと、その関数を呼び出すたびにEdebugが起動します。選択したEdebug実行モードによって、Edebugの起動時に実行が停止して関数をステップ実行できる場合もあれば、ディスプレイが更新され、デバッグコマンドのチェックを行いながら実行が継続される場合もあります。デフォルトの実行モードはステップで、実行を停止します。Edebug実行モードを参照してください。

デバッグが完了し、インストルメンテーションなしで関数を実行したい場合は、Instrumenting for Edebugに記載されているいずれかの方法を用いて、インストルメンテーションを削除できます。

Edebug 内では、通常、デバッグ対象の Lisp コードのソースを表示する Emacs バッファを表示します。これは ソースコードバッファ と呼ばれ、一時的に読み取り専用となります。

左端のフリンジにある矢印は、関数が実行されている行を示しています。グラフィカルでないディスプレイ(または左端のフリンジが表示されない場合)では、この矢印は代わりに左マージンに表示されます。ポイントは当初、行内のどこで関数が実行されているかを示していますが、自分でポイントを移動させると、この表示はされなくなります。

fac(以下に表示)の定義にインストゥルメントを施し、(fac 3)を実行すると、通常は次のような表示になります。ポイントはifの前にある開き括弧にあります。

(defun fac (n)
=>∗(if (< 0 n)
      (* n (fac (1- n)))
    1))

関数内でEdebugが実行を停止できる箇所を停止点と呼びます。これらは、リストである各部分式の前後、および各変数参照の後に存在します。ここでは、関数 fac における停止点をピリオドで示します:

(defun fac (n)
  .(if .(< 0 n.).
      .(* n. .(fac .(1- n.).).).
    1).)

Edebugの特殊コマンドは、Emacs Lispモードのコマンドに加えて、ソースコードバッファでも利用可能です。例えば、Edebugコマンド SPC と入力すると、次の停止点まで実行できます。fac に入った後に SPC と一度入力すると、次のような表示になります:

(defun fac (n)
=>(if ∗(< 0 n)
      (* n (fac (1- n)))
    1))

Edebugが式の実行後に停止すると、その式の値がechoエリアに表示されます。

その他によく使用されるコマンドとして、停止点にブレークポイントを設定する b、ブレークポイントに到達するまで実行する g、Edebug を終了して最上位のコマンドループに戻る q などがあります。すべての Edebug コマンドの一覧を表示するには、? と入力してください。