I wish to make a software which tracks the function calls of another software.
It should be like which function is being called from where "during run time".

Example:

int main ()
{
    a ();
    b ();
    c ();
    return 0;
}

a () 
{
   d ();
   e ();
}

b ()
{
   e ();
   f ();
}

Assuming I wish to write this currently in C for C, how should I keep a track of the calls at run time (starting from the first call) - with threads and without threads?

Hints?

Edit
Report