You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
One of our clients sent us a bug report, which consisted of a 700 line Haskell program with a complaint that “it deadlocks.” After studying the code I concluded that, for the sake of the bug report, it could be summarized as print a bunch of stuff, then crash with a stack overflow So I wanted to replace the original code with code that did just that: print a bunch of stuff, then crash with a stack
これまで GHC では、スタックトレースを取ることが有効なデバッグ方法ではなかった。 なぜなら遅延評価では、(再帰であってもなくても)末尾呼び出しは単なるジャンプになるから、スタックを使わないのである。スタックに戻る場所を積むのは、case と of の中で評価される式だけだ。(つまり、ここは正格に評価される。) この問題を解決するために GHC 7.4.2 から、わざわざスタックにログを残して、スタックトレースが取れるようになった。すなわち、最新の Haskell Platform をインストールしていれば、この機能を使えるということだ。 例として、以下のプログラムを考えよう。 module Main where main :: IO () main = print $ foo 3 + 1 foo :: Int -> Int foo x = x * 2 + bar x bar :: In
Haskell Advent Calendar 2011 のためのエントリです。 最近、会社でも Haskell を開発のメンバーで使っていくことに正式に決まりました。 Haskell のプログラムをデバッグするときにデバッガーのようなツールを使うことが できるのか社内で質問されたので調べてみました。 GHCi debugger 公式のドキュメント http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/ghci-debugger.html や その翻訳 http://www.kotha.net/ghcguide_ja/7.0.4/ghci-debugger.htmlを 参考にしながら試してみて、私なりに理解した内容を紹介しようと思います。 mkothaさん、すばらしい翻訳をありがとうございます。 さっそく、GHCi debugger
(追記(2011-07-30): '記号を含むprofファイルの解析に失敗するバグを修正したものをGitHub - mkotha/viewprof: A viewer of GHC .prof files with curses interfaceに上げた) +RTS -pで出力される.profファイルには呼び出しグラフが含まれていて大変役に立つが、大きなプログラムだと木構造が一見して分かり辛い。特に、「この関数に時間が掛かっているのは分かったが、コストが高いのはどこから呼ばれる場合か」のようなことを知るのが面倒だ。そこで.profファイルを対話的に閲覧できるツールを書いた。 使い方 j: 一行下へ k: 一行上へ Ctrl-d: 半ページ下へ Ctrl-u: 半ページ上へ スペース: 木構造の展開/畳み l: 右へスクロール h: 左へスクロール r: ボトムアップモードへ q: 終了
GHCiは単純な命令的スタイルのデバッガを搭載していて、実行中の計算を停めて変数の値を確かめることができる。このデバッガはGHCiに統合されており、デフォルトで有効になっている。デバッグ機能を使うのにフラグは必要ない。一つ、重要な制限があって、ブレークポイントとステップ実行は解釈実行されているモジュールでしか使えない。コンパイル済みコードはデバッガからは見えない[5]。 このデバッガは以下のものを提供する。 プログラム中の関数定義や式にブレークポイントを設定する能力。その関数が呼ばれたとき、あるいはその式が評価されたとき、GHCiは実行を中断してプロンプトに戻る。そこで、実行を続ける前に、局所変数の値を調べることができる。 ステップ実行ができる。評価器は、簡約をだいたい一回行うごとに実行を一時停止し、局所変数を調べることができるようにする。これはプログラムのあらゆる地点にブレークポイントを
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く