天天看點

print strace

為了調試友善,有些時間我們需要列印堆棧資訊.

print strace
print strace

Code

#include <execinfo.h>

#include <stdio.h>

#include <stdlib.h>

void print_strace(void)

{

        void *array[10] = {0};

        size_t size;

        char **strings;

        size_t i;

        int nCount = 0;

        size =backtrace(array,10);

        strings = backtrace_symbols(array,size);

        for(i = 0;i<size;i++)

        {

                printf("%s/n",strings[i]);

                if(strstr(strings[i],"ILibWebServer_Release")!=NULL)

                {

                        nCount++;

                }

        }

        free(strings);

}

void fun(void)

{

        print_strace();

}

int main(void)

{

        fun();

        return 0;

}

編譯時一定要加上參數(-g -rdynamic).

不加-rdynamic的效果就是:

./a.out [0x8048469]

./a.out [0x80484fa]

./a.out [0x8048512]

/lib/libc.so.6(__libc_start_main+0xdc) [0x4b863f2c]

./a.out [0x80483b1]

加-rdynamic的效果就是:

./a.out(print_strace+0x35) [0x8048639]

./a.out(fun+0xb) [0x80486ca]

./a.out(main+0x16) [0x80486e2]

/lib/libc.so.6(__libc_start_main+0xdc) [0x4b863f2c]

./a.out [0x8048581]

呵呵,函數名都打出來了,這是我們想要的.