2013-05-02 13 views
11

GHCで何かをコンパイルするのに時間がかかる場合は、それが何をしているのかを見つける方法はありますか?GHC活動の監視

まず、コンパイラを実際にクラッシュしたか(何らかの無限ループに入れてしまったか)、実際に進歩しているのかどうかは知りたいですが、非常にゆっくりです。

第2に、コンパイルプロセスのどの部分が問題を抱えているのかを正確に知ることはうれしいことです。それはパース、デッサージ、型チェック、コア最適化、コード生成なのでしょうか?

何が起こっているのかを監視する方法はありますか? (GHCは長い時間がかかっている場合は、おそらくそれは多くの作業をやっているので、あなたはあまりにも多くの出力を求めるならば、巨大になるだろう意味念頭に!

GHCはすでにあなたに指示されたモジュールそれは(再)コンパイルしようとしています。私の場合、問題は単一の自己完結型モジュールです。私は、GHCがどこに行き詰まっているのかを知りたい。

+1

あなたはGHCのプロファイルバージョンをビルドしてから見て、標準的なプロファイリングツールを使用することができます(この質問を促したプログラムの特定の場合には、GHCは型チェックの段階で永遠に過ごしているようです。)それは事実の後に何が起こっているのか。 – Davorak

+5

あなたは '' -v4''が何が起こっているのかを冗長表示するように指定することで、冗談になるように頼むことができます - はい、出力は巨大ですが、ただ監視したいならばターミナルは、最後の1000行程度しか記憶していません。 –

+1

私の経験では、無限ループに入っているGHCは、それがゆっくりと一般的にはたくさんのメモリを食べさせるので、認識することができます。 –

答えて

4

Daniel Fischerのコメントに続いて、GHCをさまざまな冗長オプションで実行しようとしました。

  • -v1:出力が少し増えますが、メインコンパイルのステップでは何も出力されません。
  • -v2:GHCが現在行っているステップ(パーサー、デーガ、タイプチェック、シンプリファイアなど)を教えてください。これは私が実際に望んでいたものです。
  • -v3:簡略化して実際にコンソールに行っていることをダンプするように見える - 8MBのソースコードをコンパイルするときに悪い考えだ!

だから、-v2が開始する場所です。

+0

型チェックの場合、無限ループで固定される可能性があります決定不能なインスタンス。型推論はまた、H-M推論が最悪の場合、最悪の場合の時間の複雑さを有するので、問題となり得る。それらが私が考えることができる唯一の合理的な原因です。問題を解決しましたか? –

+0

@ C.A.McCann私は単に_huge_ソースファイルをコンパイルしようとしていました。それは特に珍しいことは何も含まれていない、それは非常に、非常に大きいです。問題をもっと小さくすることで問題を "解決"しました。 – MathematicalOrchid