zoukankan      html  css  js  c++  java
  • Linux backtrace()

    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
    ", fun3);
    20     for(i = 0; i < size; i++)
    21     {
    22         printf("frame %d -- %s
    ", 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
    ", fun2);
    35     fun3();
    36 }
    37 
    38 void fun1(void)
    39 {
    40     printf("fun1 0x%x
    ", fun1);
    41     fun2();
    42 }
    43 
    44 int main(void)
    45 {
    46     printf("main 0x%x
    ", 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

     

  • 相关阅读:
    分享jstl实现分页,类似百度分页
    分享git的常用命令
    ubuntu certbot 生成免费泛域名证书
    es创建普通索引以及各种查询
    动态代理
    开闭原则
    单一原则
    单例模式
    设计模式之观察者模式
    SpringBoot集成spring-data-jpa注入Bean失败
  • 原文地址:https://www.cnblogs.com/Lunais/p/13639662.html
Copyright © 2011-2022 走看看