While this will not tell you exactly where in the code Mathematica is working at any given moment, this
LinkWrite[$ParentLink,
SetNotebookStatusLine[FrontEnd`EvaluationNotebook[], "Beginning to evaluate xxx"]];
can be placed at appropriate places in your code and it will display the string in the lower left corner of the notebook "status line."
You can even enhance that by using ToString in conjunction with StrinJoin to splice in the values of expressions if that will help.
Putting one of those before each potentially time consuming block of code can help you diagnose where things are slowing down.