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