The solution I ended up using is John Panzer's Call Moniter class. This code runs with my program and outputs the functions with their full names(including class), when there are called, and when they are finished, using indentation to show how deep the function is embedded in other functions. It took a little modification to get rid of excess data, but it works beautifully. I will probably modify it to output to excel instead of outputting to the console as called.
Thanks all for your answers. Looking at all the results, none of them quite did the job, but it helped give me an idea of what was going on.
Some of the suggested answers might have worked, but they were all over my head or I could not get them operational or I could not find the functionality I was looking for.
EDIT: The Call Moniter class ended up being another false trail. It showed functions names as they were called, in the order they were called, and nested them to show which functions called which, and that was great. I had to filter out some noise, which was fine. But at the end, when I looked at the results, this class missed a full half of all the functions that were called! Oh, and I dont know if it would work with threads properly, as the functions that called threads were some of those that were skipped over.
From what I understand, what I wanted was a call graph.