I need to profile a program to see whether any changes need to be made regarding performance. I suspect there is a need, but measuring first is the way to go. This is not that program, but it illustrates the problem I'm having:
#include <stdio.h>
int main (int argc, char** argv)
{
  FILE* fp = fopen ("trivial.c", "r");
  if (fp)
  {
    char line[80];
    while (fgets (line, 80, fp))
      printf (line);
    fclose (fp);
  }
  return 0;
}
Here's what I did with it:
% gcc trivial.c -pg -o trivial
% ./trivial
...
% gprof trivial gmon.out
Granted, this is a trivial program, but I would have thought it would make some kind of blip on the profiling radar. It didn't:
                                  called/total       parents 
index  %time    self descendents  called+self    name       index
                                  called/total       children
                0.00        0.00       1/1           __start [1704]
[105]    0.0    0.00        0.00       1         _main [105]
-----------------------------------------------
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
  0.0       0.00     0.00        1     0.00     0.00  _main [105]
Index by function name
 [105] _main              
Can anyone guide me here? I would like the output to reflect that it called fgets and printf at least 14 times, and it did hit the disk after all - there should be some measured time, surely.
When I run the same command on the real program, I get more functions listed, but even then it is not a complete list - just a sample.
Perhaps gprof is not the right tool to use. What is?
This is on OS X Leopard.
Edit: I ran the real program and got this:
% time real_program
real      4m24.107s
user      2m34.630s
sys       0m38.716s
 
     
     
     
     
     
     
     
     
     
    