最近すごいH本でHaskellの勉強を始めたKekehoです。
関数型言語を学ぶのは初めてで、なかなか挙動がスッと理解できないことも多く困っていました。
そんな時、GHCiで簡単にデバッグができてしまうと知ったので記事にしておきます。
まだ勉強中で正しい表現ができているか不安です…おかしいところあればご指摘いただけたら嬉しいです。
もっと詳細に知りたい場合は、以下のリンクがわかりやすかったので読んでみてください。
参考: GHCiデバッガ
:break ブレークポイントの設置
基本的には指定した行の一番左の部分式にブレークポイントが置かれるようです。
モジュール名が省略された場合、直前にロードされたモジュールとなるようです。
:break [関数名] -- 関数を定義した行にブレークポイントを設置
:break [行番号] -- 直前にロードしたモジュールのn行目に設置
:break [行番号] [列番号] -- n行目のm文字目に設置
:break [モジュール名] [行番号] -- モジュール名の指定も可能(上の3つのように指定しないと、直前にロードされたモジュールになる)
:break [モジュール名] [行番号] [列番号]
breaks ブレークポイント一覧
ブレークポイント一覧が表示されます。
:show breaks
:step ステップ実行
ブレークポイントで停止した後、ステップ実行することができます。
:step -- 普通にプログラム内でステップ実行
:steplocal -- 現在の関数内でステップ実行
:stepmodule -- 現在のモジュール内でステップ実行
:continue ステップ実行を抜けてプログラムを続ける
:continue
ステップ実行中に式を評価する
他の言語で言うところの、変数の中身を見るって感じです。「式を評価する」という表現が適切なのかよくわかりません。指摘お願いします。
ステップ実行中に、普通にその場で式を書けば評価された値が表示されます。
[式] -- 評価された値が表示される
:t [式] -- 型の情報
他にも代入とかいろいろできます。
:list 現在のブレークポイント周辺のコードを表示
:list
-fbreak-on-exception 例外が投げられたら止まる
Exceptionが投げられたらそこで評価が止まり、自動的にステップ実行に入ります。
:traceなどと併用すると便利です。
:set -fbreak-on-exception -- 例外が発生したら止める
:set -fbreak-on-error -- 例外が補足されなかった場合にのみ止める
:trace 追跡実行
式を追跡付きで評価できます。
:trace [式]
-- 実行後
:hist -- 履歴一覧
:back -- 履歴を前にさかのぼって調査
:forward -- 履歴をさかのぼっている最中、次に進む