Search code examples
cubuntufunction-call

Counting the number of function calls in an executable


I am trying to find the exact number of function calls to one of my implemented C function inside my code. The project includes several C files. What is the easiest solution to figure out how many times a function is called during the execution of the program? Specifically, I am interested to know how many times a specific function calls another function. For instance I have a C file like:

//file1.c
int main(){
foo1();
return 0;
}

and other C files like:

//file2.c
void  foo1(){
    foo2();
    ...
    foo2();
}

and

//file3.c
void foo2(){
    foo3();
    foo3();
    foo3();
}

Now I have my final executable a.out and want to know how many times foo3() is called inside foo1(). BTW, I am compiling and running my project on Linux.


Solution

  • You can use 2 global variables (put extern at the places that access the variable outside the file you declare them) :

    int foo1_active = 0;
    int foo3_counter = 0;
    

    then each time foo1 is called you increment it variable and before the return you decrement it:

    void foo1() {
        foo1_active++;
        ...
        foo1_active--;
        return
    }
    

    when foo3 is called you check if foo1 active and if it does you increment the counter:

    void foo3() {
        if foo1_active > 0 { 
            foo3_counter++;
        }
        ...
    }