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

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

zhangbh@prolin-srv:<~$> gcc -g -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 100void *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;
}

addr2line 0x4008e0 -e ./a.out -f这样可以找到具体的c文件的行号

在Linux中打印函数调用堆栈【原创】相关推荐

  1. linux下追踪函数调用堆栈

    Linux下追踪函数调用堆栈 文章目录 Linux下追踪函数调用堆栈 0x01 backtrace函数 0x02 backtrace_symbols函数 0x03 backtrace_symbols_ ...

  2. JVM解惑:消失的异常堆栈,log中打印异常堆栈为空

    最近线上发现很多异常没有堆栈信息,只有一句描述,如下: java.lang.NullPointerException: null 排查问题时受到了一些阻碍.然后发现无论是在本地环境还是测试环境,堆栈信 ...

  3. Linux中打印文件行号的方法

    Linux中打印文件行号的方法 准备环境 [root@max mytest]# cat >/mytest/number.txt<<EOF > no root,no fruit ...

  4. linux如何打印环境变量,在Linux中打印环境变量

    定义,声明和extern关键字 为了理解变量是如何外部涉及到extern关键字,它有必要了解定义和声明变量之间的区别.当一个变量被定义时,编译器会为该变量分配内存,并可能将其内容初始化为某个值.当声明 ...

  5. linux 函数中打印调用栈

    一.内核中 To print the stack contents and a backtrace to the kernel log, use the #include <linux/kern ...

  6. backtrace java_Android下面打印进程函数调用堆栈(dump backtrace)的方法

    1. 为什么要打印函数调用堆栈? 打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系.比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出 ...

  7. linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现

    扫描图片是日常办公中进行的比较频繁的工作,如何在Linux中使用扫描仪就成为了一个问题.下面笔者就详细介绍一下在Linux中如何进行扫描. 常见的RedHat Linux9(以下简称RH9)中内置了小 ...

  8. linux打印函数名,linux kernel 打印函数指针对应的函数名方法

    linux kernel 打印函数指针对应的函数名方法 内核中函数指针用的很多,在debug 的时候能直接打印出一个函数指针对应的函数就会很方便. 打印裸指针(raw pointer)用 %p,%p除 ...

  9. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

最新文章

  1. Sql server Insert执行的秘密(下) 带外键的INSERT分析
  2. cqueue结构pop_c++ stl栈容器stack的pop(),push()等用法介绍及头文件
  3. 区块链智能合约入门:Hello world(2)
  4. goland os.Open 路径错误
  5. 怎么样设置关闭网页再次登录网页是正常登录状态_学籍系统出现“该账号已登录,不能重复登录”怎么办?...
  6. linux下自定义dubbo的shell脚本
  7. (四)代码优化 (快来看看怎样写出真正高性能的代码)
  8. 网络编程(part10)--socket套接字编程之UDP套接字
  9. 【matlab】将matlab中数据输出保存为txt或dat格式
  10. EditPlus配置Python环境
  11. 小数变百分数_小数除法三要“点”
  12. 数据可视化的十大优点
  13. html swf修改参数,HTML网页中如何向swf传递参数
  14. 高考导数选择题解题方法
  15. img标签在div中水平垂直居中--两种实现方式
  16. 全面了解风控策略体系
  17. linux+4k+桌面壁纸,微软发布适用于Windows 10的4K壁纸包
  18. python异常处理机制例题_16.python异常处理
  19. 熟练的运用计算机英语怎么说,熟练用英语怎么说
  20. mysql error 1837_MySQL复制错误1837的相关缺陷一例——insert delay在GTID下异常binlog格式...

热门文章

  1. 那些jdk中坑你没商量的方法
  2. 一个比 Spring Boot 快 44 倍的 Java 框架
  3. 微服务架构之「 API网关 」
  4. 工业缺陷检测比赛Top3方案
  5. 提高 GPU 训练利用率的Tricks
  6. 【pandas学习笔记】DataFrame
  7. 2021高校毕业生薪酬Top100出炉!清华指数TOP,薪酬却排名第二
  8. PyTorch官方培训教程上线:从基本概念到实操,小白也能上手
  9. 到了管理层我才发现,这些管理知识应该尽早学起来!
  10. 985博士分享Pytorch与Tensorflow,哪个更值得你学习?