Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Monitoring GHC activity

Tags:

haskell

ghc

If GHC takes a long time to compile something, is there a way to find out what it's doing?

Firstly, it would be nice to know if I've actually crashed the compiler (i.e., put it into some sort of infinite loop somehow), or whether it's actually making progress, but just very slowly.

Secondly, it would be nice to know exactly what part of the compilation process GHC is having trouble with. Is it the parsing, or desugaring, or type-checking, or Core optimisation, or code generation, or...?

Is there some way to monitor what's going on? (Bearing in mind that if GHC is taking a long time, that probably means it's doing a lot of work, so if you ask for too much output it's going to be huge!)

GHC already tells you which modules it's trying to (re)compile. In my case, the problem is a single self-contained module. I'd like to know where GHC is getting stuck.

like image 444
MathematicalOrchid Avatar asked May 02 '13 21:05

MathematicalOrchid


1 Answers

Following Daniel Fischer's comment, I tried running GHC with different verbosity options.

  • -v1: Produced a bit more output, but nothing during the main compilation step.
  • -v2: Tells you what step GHC is currently doing (parser, desugar, type check, simplifier, etc). This is pretty much what I actually wanted.
  • -v3: Appears to make the simplifier actually dump what it's doing to the console - bad idea while compiling 8MB of source code!

So it seems that -v2 is the place to start.

(In the specific case of the program that prompted this question, it seems GHC is spending forever in the type checking phase.)

like image 196
MathematicalOrchid Avatar answered Nov 16 '22 00:11

MathematicalOrchid