标签:-- backtrace void strframe Linux main frame out
https://man7.org/linux/man-pages/man3/backtrace.3.html
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdint.h> 4 #include <stdlib.h> 5 #include "execinfo.h" 6 7 typedef uint32_t UINT32; 8 9 void fun3(void) 10 { 11 void* array[10] = {0}; 12 UINT32 size = 0; 13 char **strframe = NULL; 14 UINT32 i = 0, j = 0; 15 16 size = backtrace(array, 10); 17 strframe = (char **)backtrace_symbols(array, size); 18 19 printf("print call frame now: 0x%x\n", fun3); 20 for(i = 0; i < size; i++) 21 { 22 printf("frame %d -- %s\n", i, strframe[i]); 23 } 24 25 if(strframe) 26 { 27 free(strframe); 28 strframe = NULL; 29 } 30 } 31 32 void fun2(void) 33 { 34 printf("fun2 0x%x\n", fun2); 35 fun3(); 36 } 37 38 void fun1(void) 39 { 40 printf("fun1 0x%x\n", fun1); 41 fun2(); 42 } 43 44 int main(void) 45 { 46 printf("main 0x%x\n", main); 47 fun1(); 48 return 0; 49 }
[xxxzte.intra@桌面]$ gcc -g -rdynamic backTrace.c
[xxx@zte.intra@桌面]$ ./a.out
main 0x4009b8
fun1 0x400998
fun2 0x400978
print call frame now: 0x4008a6
frame 0 -- ./a.out(fun3+0x4a) [0x4008f0]
frame 1 -- ./a.out(fun2+0x1d) [0x400995]
frame 2 -- ./a.out(fun1+0x1d) [0x4009b5]
frame 3 -- ./a.out(main+0x1d) [0x4009d5]
frame 4 -- /usr/lib64/libc.so.6(__libc_start_main+0xf1) [0x7f2381398401]
frame 5 -- ./a.out(_start+0x2a) [0x4007da]
[xxx@zte.intra@桌面]$ addr2line 0x4009d5 -e ./a.out -f
main
/home/xxx@zte.intra/桌面/backTrace.c:48
标签:--,backtrace,void,strframe,Linux,main,frame,out 来源: https://www.cnblogs.com/Lunais/p/13639662.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。