本人学习笔记,代码参考如下网址
参考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 addresses
./my(my_func+0x1f)[0x40089c]
./my(run+0x9)[0x4008e0]
./my(main+0x14)[0x4008f6]
/lib/x86_64-linux-gnu/libc.so.(__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
#include
#include
#include
void my_func(void)
{
int j, nptrs;
#define SIZE 100
void *buffer[];
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 ;
}
addr2line 0x4008e0 -e ./a.out -f
这样可以找到具体的c文件的行号
在linux代码中打印函数调用的堆栈的方法
之前一直有这样的需求,当时问到,也没搜到方法,现在竟然既问到了,也搜到了,哎,世事真是不能强求啊! 在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: ...
从汇编角度来理解linux下多层函数调用堆栈执行状态
注:在linux下开发经常使用的辅助小工具: readelf .hexdump.od.objdump.nm.telnet.nc 等,详细能够man一下. 我们用以下的C代码来研究函数调用的过程. C ...
从汇编角度来理解linux下多层函数调用堆栈运行状态
我们用下面的C代码来研究函数调用的过程. C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int bar(int c, int d) { ...
在LINUX中跟踪函数调用----http://stackoverflow.com/
http://stackoverflow.com/questions/311840/tool-to-trace-local-function-calls-in-linux I am looking f ...
在C语言中破坏函数调用堆栈
// 这段代码显示,在C语言修改函数的返回地址 int test1() { ; } int test2(int a) { *(&a-) = (int)test1; // 将返回地址修改为tes ...
【转】Android下面打印进程函数调用堆栈(dump backtrace)的方法
1. 为什么要打印函数调用堆栈? 打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系.比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出 ...
VC++ 崩溃处理以及打印调用堆栈
title: VC++ 崩溃处理以及打印调用堆栈 tags: [VC++, 结构化异常处理, 崩溃日志记录] date: 2018-08-28 20:59:54 categories: windows ...
嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误
嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报 分类: 嵌入式(928) 一般察看函数运行时堆栈的 ...
Linux下函数调用堆栈帧的详细解释【转】