在Linux中打印函数调用堆栈【原创】

简介:

本人学习笔记,代码参考如下网址

参考http://www.cnblogs.com/dma1982/archive/2012/02/08/2342215.html

复制代码
zhangbh@prolin-srv:<~$> gcc -rdynamic -o my a.c
zhangbh@prolin-srv:<~$> ./my 
backtrace() returned 5 addresses 
./my(my_func+0x1f)[0x40089c]
./my(run+0x9)[0x4008e0]
./my(main+0x14)[0x4008f6]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f68032c7ec5]
./my[0x4007b9]
复制代码
复制代码
Linux中共提供了三个函数用于打印调用堆栈:

/*
* 函数说明: 取得当前函数的调用堆栈
* 参数:
*     buffer:用于存储函数地址的数组
*     size:buffer数组的长度
* 返回值:
*      存储到数组中的函数个数
*/
int backtrace(void **buffer, int size);
 
/*
*
* 函数说明:将一组函数地址转换为字符串
* 参数:
*      buffer: 经由backtrace得到的函数地址
*      size: buffer数组的长度
* 返回值:
*       函数在系统中对应用字符串
*/
char **backtrace_symbols(void *const *buffer, int size);
 
/*
* 函数说明:将一组函数地址转换为字符串
* 参数:
*      buffer: 经由backtrace得到的函数地址
*      size: buffer数组的长度
*      fd: 输出结果文件描述符
*/
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
复制代码

 

 

复制代码
#include <stdio.h>
#include <execinfo.h>
#include <stdlib.h>
#include <unistd.h>

void my_func(void)
{
    int j, nptrs;
#define SIZE 100
    void *buffer[100];
    char **strings;

    nptrs = backtrace(buffer, SIZE);
    printf("backtrace() returned %d addresses \r\n", nptrs);

    backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO);
}

void run(void)
{
    my_func();
}

int main(int argc, char **argv)
{
    run();

    return 0;
}
复制代码

 














本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5889612.html,如需转载请自行联系原作者


相关文章
|
2月前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
69 0
|
2月前
|
缓存 Linux 编译器
C/C++ 函数调用以及Linux中系统调用 开销介绍:介绍C/C函数调用以及Linux中系统调用的开销情况
C/C++ 函数调用以及Linux中系统调用 开销介绍:介绍C/C函数调用以及Linux中系统调用的开销情况
17 0
【Linux】直接打印堆栈调试信息
【Linux】直接打印堆栈调试信息
【Linux】直接打印堆栈调试信息
|
安全 Linux
2021-11-15 Linux杀毒暂时没写输出和打印以及邮箱上传
2021-11-15 Linux杀毒暂时没写输出和打印以及邮箱上传
84 0
|
Linux
LINUX:lpr不能打印,可以试试lp
LINUX:lpr不能打印,可以试试lp
127 0
|
Java Linux
在红旗LINUX loongarch上,可以正常打印,lpr卡死
在红旗LINUX loongarch上,可以正常打印,lpr卡死
70 0
|
Shell Linux
linux shell之控制台打印各种颜色字体和背景
linux shell之控制台打印各种颜色字体和背景
328 0
linux shell之控制台打印各种颜色字体和背景
|
机器学习/深度学习 Linux
Linux使用cups进行打印
Linux使用cups进行打印
182 0