2016-07-14 12 views
3

Emacs/geiserをRacket(DrRacketではなく)で使用すると、ブレークポイントを設定してから、コードをステップ実行してブレークポイントで停止できますか?例えば、私はこのコードを持っている:ラケットにブレークポイントを設定しますか?

(define (powerset4 lst) 
    (if (null? lst) 
     '(()) 
     (append-map (lambda (x) 
        (begin 
         (fprintf (current-output-port) "~s ~s ~s\n" x lst x) 
         (list x (cons (car lst) x)))) 
        (powerset4 (cdr lst))))) 

を、私は値が何であるかが起こっているとものを見るためにbeginシーケンス内で停止したいです。 printfのトリックにも依存しないこと、つまり特定のパラメータをトラッキングすることもいいでしょう。再び、私はEmacsにいてGeiserを使っています。実際に、私はこれをもっとうまくやれば、ガイアやチキン(ガイザーの言語)に切り替えることができます。

+2

ブレークポイント、ステッピングなどを設定する機能は、言語ではなくデバッガまたはIDEに通常関連付けられている機能です。 '#lang racket'では標準のデバッガがDrRacketに組み込まれています。 Therは 'debug'モジュール[https://docs.racket-lang.org/debug/index.html?q=debug#%28mod-path._debug%29]であり、不安定なライブラリ[https:// docs。 racket-lang.org/unstable/Debugging.html?q=debug#%28form._%28%28lib._unstable%2Fdebug..rkt%29._debug%29%29]これはラケット言語プログラムの一部として行うことができます。これらは「印刷」よりも管理しやすいかもしれません。 –

+0

@ 147pm DrRacketのグラフィカルデバッガを使用してブレークポイントを取得します。 http://docs.racket-lang.org/drracket/debugger.html – soegaard

+0

DrRacketを特に要求していない質問です。 –

答えて

1

@ben談合者が言及しているように、あなたが欲しいもののためにかなりうまくいくように見えるdebug言語(およびライブラリ)があります。私は "不安定な"警告がやや不快なので、他のデバッグライブラリを使用していません。ここで

は、あなたのプログラムから適応サンプルtest.rktファイル、だ:私はガイザーにファイルをロードするためにC-c C-aを行うと

#lang racket 

(require debug/repl) 

(define (powerset4 lst) 
    (if (null? lst) 
     '(()) 
     (append-map (lambda (x) 
        (begin 
         (list x (cons (car lst) x)) 
         (debug-repl) ;; this is the breakpoint that will enter a REPL 
        )) 
        (powerset4 (cdr lst))))) 

(powerset4 '(1 2 3)) 

、私は、私は、デバッガを入力したことを示してREPLで迎えています。次に、現在のスコープの値を調べて、何が起こっているかを確認できます。

Welcome to Racket v6.6. 
[email protected]> ,enter "/Users/my_username/test.rkt" 
[email protected]> x 
'() 
[email protected]> lst 
'(3) 
[email protected]> 

不思議なことに、(少なくとも私にとっては)ガイザーがauto-completelst変数をしようとしたとき、REPLがハングし、REPLのracketプロセスを殺すことはEmacsは同様にハングアップしていました。それが何であるかはっきりとは分かりませんが、これはそれを除いてうまくいくようです。

関連する問題