5

私はそれを行うためのより良いテクニックを探しています。私の一般的な苦労は、デバッガーが変数の値をキャッチするには遅すぎるか早すぎるかのどちらかであるという事実です。

私が最初に試したこと:

(loop for i from 0 to 10 do
  (break))

デバッガーが休憩時間に入ると、アクセスできませんi:(無駄な作業です。デバッガーのオプション(フレーム内での評価)を試しましeたが、SLIMEは通常バグアウトするだけで、SWANKに再接続する必要がありvますt。変数が「そこにない」ので、助けてください。

私がやったこと:

(loop for i from 0 to 10 do
  (signal i))

これはばかげiていますが、デバッガーで調べることができるフレームのスタックに配置されるため、機能します。しかし、これはただ...まあ、それは言葉の最悪の意味でハックです。変数を「監視」する方法や、ブレークポイントが入力された場所の周りでより多くの変数を確認できるように、ブレークポイントを設定するためのより意味のある方法はありませんか?

4

1 に答える 1

4

最初のスニペットは、CCL(デフォルトoptimize設定)、Emacs 24、および最近プルされたSlimeで問題なく機能します。

Break
   [Condition of type SIMPLE-CONDITION]

Restarts:
 0: [CONTINUE] Return from BREAK.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT-BREAK] Reset this thread
 4: [ABORT] Kill this thread

Backtrace:
  0: (#<Anonymous Function #x186F9B7E>)
      Locals:
        I = 0
  1: (CCL::CHEAP-EVAL (LOOP FOR I FROM 0 TO 10 DO (BREAK)))

⋮

sldb-eval-in-frame私にとってもうまくいきます。たぶん、別のLisp実装または別のバージョンのSlimeを試す必要があります。

また、optimizeここではさまざまな設定が重要になる可能性があり、一部の実装では、解釈されたコードのデバッグ結果が向上することに注意してください(インタープリターが使用可能な場合)。のようなものを試してください(declaim (optimize (debug 3) (speed 0) (space 0)))

于 2012-12-11T21:28:11.607 に答える