0
(progn
  (print 11)
  (/ 1 0)
  (print 22)
  (/ 2 0)
  (print 33))

その式で CMx を押すと、(/ 1 0) で失敗したときに Emacs がデバッガーを呼び出します。q の代わりに c を押して続行しても、デバッガーは (print 22) または (/ 2 0) を実行せずに終了します。ここでの唯一の違いは、c がメッセージで終了することです。

progn: Arithmetic error

c と q が大きな違いを生むサンプル コードは何ですか? また、いつ q ではなく c を入力する必要がありますか?

4

4 に答える 4

2

違いは、実行を停止しないコード、つまりエラーを含まないコード (たとえば、 によって呼び出されたときdebug) で示されます。

于 2013-09-09T08:42:45.393 に答える
2

を使用すると、違いが最も分かりやすくなりますdebug-on-signal。この設定を使用すると、エラーが囲まれた によって処理された場合でも、エラーが通知されたときにデバッガーが呼び出されますcondition-case。このような状況cでは、通常の実行が続行されます (つまり、エラーが通知され、それによってハンドラ コードが実行され、通常どおり実行が続行される場合があります)。

于 2013-09-09T12:42:49.423 に答える
0

もう 1 つの違いは、再帰編集に関するものです。たとえば、query-replace を呼び出してから recursive edit に入り、(/ 1 0)それを入力および評価してデバッガーに入ることができます。ここで q を押すと、トップ レベルに戻り、query-replace は実行されなくなります。しかし、代わりに c を押すと、まだ再帰編集の中にいます。

別の違いを更新します。デバッガー内では、cは にバインドされ、debugger-continueはラッパーの周りにexit-recursive-edit あり、qは にバインドされていtop-levelます。これは、exit-recursive-editvsについて知られている違いtop-levelが適用されることを意味します。違いについては、再帰編集 - Emacs マニュアルを参照してください。

これはRecursive Editing - Emacs Lisp Manualの例を変更して違いをテストする例です。

(defun simple-rec ()
  (forward-word 1)
  (message "111")
  (debug)
  (message "222")
  (forward-word 1))
于 2013-09-09T18:27:21.397 に答える
0

最初は非常に明白な質問のように思えましたが、例を作成しようとした後、実際にはinfo. ですから、私が自分で明確にしたことを要約しましょう。

cinはinedebugと同じではありません。これは、各ブレークポイントで 1 秒間停止し、最終的に終了します。現時点では、それが誰にとっても役立つかはわかりません。代わりに、これは次のブレークポイントまで続き、そこで停止します。cgdbg

コード例を次に示します。

(defun foo ()
  (setq x (loop for i from 1 to 100
             collecting (* i i)))
  (setq y (nth 5 x))
  (incf y))

(foo)

それにedebug

  1. このコードを貼り付けます*scratch*
  2. fooand C-u C-M-x(calls edebug-defun)の内側にポイントを移動
  3. ポイントをyインに移動しsetq yM-x edebug-set-breakpoint
  4. と の閉じ括弧にポイントを(foo)移動C-j
  5. あなたは今 にいedebugます。b ここでは、代わりにショートカットを使用してステップ 3 を実行できます。M-x ...
  6. SPC毎回ループの各ステートメントを移動するため、処理を進めるのは面倒であることがわかります。
  7. しかし、押すgと、ループ全体をスキップして、おそらく関心のあるステートメントに行き着きます。
于 2013-09-09T09:06:16.307 に答える