Visual Studioでデバッグ

昨日書いた評価器は、いまいちバグってるなー。静的スコープじゃなくて動的スコープになっているし、環境がグローバルの環境しかない。
デバッグでずいぶん時間を無駄にしました(そしてまだ解決していない)。

しかし、そのおかげで、Visual Studioデバッグのノウハウが手に入りました。

funのbodyは別の行にしたほうがブレイクポイントを置きやすい

let add a b cont =
  cont (a + b)

add 1 2 (fun x -> printfn "%A" x)

と書くのではなく

let add a b cont =
  cont (a + b)

add 1 2 (fun x -> 
  printfn "%A" x)  (* この行にブレイクポイントを置ける *)

と書くといいわけです。

「ローカル」ビューにはシャドウイング前の値も表示されるけど、

let x = 100        (* A *)

let add a b cont =
  cont (a + b)

add 1 2 (fun x ->  (* B *) 
  let x = 10       (* C *)
  printfn "%A" x)  (* この行にブレイクポイントを置く *)

最後の行にブレイクポイントを置いて止めたとき、ローカル」ビューにはシャドウイング前のx(行B)と後のx(行C)の値が表示されますが、エディタ上のシャドウイング前のx(行B)にカーソルを当てたときはシャドウイング後の値(行C)が表示されます。関数の外のx(行A)にカーソルを当てたときも最後のx(行C)の値が表示されます。これは、ちょっと直感的でないなぁ。