2011-01-09 16 views
9

私はLispデバッガの出力を解釈し、使用する方法を理解しようとしています。Lispデバッガを使用したヘルプ

私の関数の評価のための非常に単純なバックトレースがありますが、私はどのようにLisp 'フォーム'が関数内で例外が発生したかを調べるためにどのように使用するのか分かりません。

私のコードでエラーが発生した場所を見つけるために何をすべきかの手がかりがありがとうと思います。

また、2番目のフレームは「フレームに使用できるデバッグ情報がありません」と表示されるのはなぜですか?

私はデバッガでスクリーンショットを添付してreplを作成しました(私は以下の関数も含めました - 非常に間違っていることを知っていますが、デバッガを正しく使うことを学ぶだけです)。さらに、最初のフレームで「v」をクリックしてソースに行きましたが、その結果replの下にエラーが発生しました。 (EDIT - 欠落しているソースコードの問題は、正しいパスにコピー&をダウンロードすることにより固定されている)

alt text

(恐ろしい機能! - コメントはありませんしてください)

(defun myquicksort2 (lst) 
    (if (eql 1 (length lst)) 
     lst 
     (let ((mid (middle lst))) 
    (do ((i 0 (+ i 1))) 
     ((>= i mid) (append (myquicksort2 (subseq lst 0 mid)) 
        (myquicksort2 (subseq lst mid (length lst))))) 
     (if (> (ltval i lst) (nth 100 lst)) 
      (let ((tmp (ltval i lst))) 
     (setf (nth i lst) (gtval i lst)) 
     (setf (nth (- (- (length lst) i) 1) lst) tmp))))))) 

(defun ltval (i lst) 
    (nth i lst)) 

(defun gtval (i lst) 
    (nth (- (- (length lst) i) 1) lst)) 

(defun middle (lst) 
    (round (/ (length lst) 2))) 
+1

「Lispデバッガ」はありません。 Lispは、言語と実装の大きなファミリーです。ほとんどの実装では、異なるデバッガがあります。 Emacs用のSLIMEのようなIDEは、サポートされているリスプの上で動作するデバッガインタフェースを追加します。 –

+0

最大のデバッグ情報のために最適化フラグを設定しましたか? (declaim(optimize(speed 0)(safety 3)(debug 3)(size 0))) – Beef

+0

@Beef - はい、私はこれを既に試しています。 – Joel

答えて

4

エラーが>でありますあなたのソースには>が1つしかないので、それが問題の場所です。あなたのコード内の関数呼び出しがCL:<にあるものの、実際に呼ばれていたコード(およびデバッガに表示)ので、内蔵CL機能

編集は、SBCLに最適化を非常に起こしやすいですから、最適化、特定のSBCL内部ルーチン。これは、ユーザー定義関数ではあまり問題になりません。ユーザー定義関数は、有用なフレームを得る可能性がより高くなります。

+2

どのように私は関数が発生するソースに私を連れて行くためにデバッガで 'v'を使用できませんでしたか?私は本当にデバッガの使い方を学びたいと思っています。 – Joel

+0

@Xach - あなたが最初に編集した点に関しては、この「積極的な最適化」を無効にする方法があります - ユーザーフレンドリーなデバッグ出力のために?私はすでにコンパイルされたコードの最大デバッグサポートのために(sb-ext:restrict-compiler-policy 'debug 3)を設定しました。 – Joel

+0

エラーが内部ルーチンにあるため、SBCLのソースをSBCLが再び見つけることができるようにインストールする必要があります。簡単な方法の1つは、SBCLをビルドしてソースからインストールすることです。 – Xach

関連する問題