在Linux中打印函数调用堆栈【原创】
本人学习笔记,代码参考如下网址
参考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中打印函数调用堆栈【原创】相关推荐
- linux下追踪函数调用堆栈
Linux下追踪函数调用堆栈 文章目录 Linux下追踪函数调用堆栈 0x01 backtrace函数 0x02 backtrace_symbols函数 0x03 backtrace_symbols_ ...
- JVM解惑:消失的异常堆栈,log中打印异常堆栈为空
最近线上发现很多异常没有堆栈信息,只有一句描述,如下: java.lang.NullPointerException: null 排查问题时受到了一些阻碍.然后发现无论是在本地环境还是测试环境,堆栈信 ...
- Linux中打印文件行号的方法
Linux中打印文件行号的方法 准备环境 [root@max mytest]# cat >/mytest/number.txt<<EOF > no root,no fruit ...
- linux如何打印环境变量,在Linux中打印环境变量
定义,声明和extern关键字 为了理解变量是如何外部涉及到extern关键字,它有必要了解定义和声明变量之间的区别.当一个变量被定义时,编译器会为该变量分配内存,并可能将其内容初始化为某个值.当声明 ...
- linux 函数中打印调用栈
一.内核中 To print the stack contents and a backtrace to the kernel log, use the #include <linux/kern ...
- backtrace java_Android下面打印进程函数调用堆栈(dump backtrace)的方法
1. 为什么要打印函数调用堆栈? 打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系.比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出 ...
- linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现
扫描图片是日常办公中进行的比较频繁的工作,如何在Linux中使用扫描仪就成为了一个问题.下面笔者就详细介绍一下在Linux中如何进行扫描. 常见的RedHat Linux9(以下简称RH9)中内置了小 ...
- linux打印函数名,linux kernel 打印函数指针对应的函数名方法
linux kernel 打印函数指针对应的函数名方法 内核中函数指针用的很多,在debug 的时候能直接打印出一个函数指针对应的函数就会很方便. 打印裸指针(raw pointer)用 %p,%p除 ...
- 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误
嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报 分类: 嵌入式(928) 一般察看函数运行时堆栈的 ...
最新文章
- Sql server Insert执行的秘密(下) 带外键的INSERT分析
- cqueue结构pop_c++ stl栈容器stack的pop(),push()等用法介绍及头文件
- 区块链智能合约入门:Hello world(2)
- goland os.Open 路径错误
- 怎么样设置关闭网页再次登录网页是正常登录状态_学籍系统出现“该账号已登录,不能重复登录”怎么办?...
- linux下自定义dubbo的shell脚本
- (四)代码优化 (快来看看怎样写出真正高性能的代码)
- 网络编程(part10)--socket套接字编程之UDP套接字
- 【matlab】将matlab中数据输出保存为txt或dat格式
- EditPlus配置Python环境
- 小数变百分数_小数除法三要“点”
- 数据可视化的十大优点
- html swf修改参数,HTML网页中如何向swf传递参数
- 高考导数选择题解题方法
- img标签在div中水平垂直居中--两种实现方式
- 全面了解风控策略体系
- linux+4k+桌面壁纸,微软发布适用于Windows 10的4K壁纸包
- python异常处理机制例题_16.python异常处理
- 熟练的运用计算机英语怎么说,熟练用英语怎么说
- mysql error 1837_MySQL复制错误1837的相关缺陷一例——insert delay在GTID下异常binlog格式...