运行过程中打印出函数调用栈

原创 2015年11月20日 10:23:34


gcc main.c -g -rdynamic


/* main.c */

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_STACK_LAYERS 20

void print_trace (void)
{
    void *array[MAX_STACK_LAYERS];
    size_t size;
    char **strings;
    size_t i;
    size = backtrace (array, MAX_STACK_LAYERS);
    strings = backtrace_symbols (array, size);
    if (NULL == strings)
    {
        perror("backtrace_synbols");
        exit(0);
    }

    printf ("Obtained %zd stack frames.\n", size);
    for (i = 0; i < size; i++)
        printf ("%s\n", strings[i]);

    free (strings);
    strings = NULL;
}


void f3()
{
    print_trace();
}

void f2()
{
    f3();
}

void f1()
{
    f2();
}


int main(char * argv[], int argc)
{
    f1();
}


另外,这里有一篇更加详细的:http://blog.chinaunix.net/uid-24774106-id-3457205.html

在C/C++程序中打印当前函数调用栈

在C/C++程序中打印当前函数调用栈 2011年6月11日小武哥发表评论阅读评论       前几天帮同事跟踪的一个程序莫名退出,没有core dump(当然ulimit是打开...
  • rheostat
  • rheostat
  • 2013年01月21日 09:50
  • 13829

编程基础-----c语言打印调用栈

官方介绍: SYNOPSIS         top #include int backtrace(void **buffer, int s...
  • qq_21398167
  • qq_21398167
  • 2016年03月01日 16:56
  • 1119

Linux打印函数调用栈

目的:打印出函数的调用栈,方便定位问题 输入: void back_trace() { int i =0; void *bt[30]; char **strings; size...
  • fly1000fans
  • fly1000fans
  • 2014年07月06日 20:31
  • 942

函数调用栈的获取原理分析

上一篇文章《在Linux程序中输出函数调用栈》,讲述了在Linux中如何利用backtrace获取调用栈,本篇文章主要介绍一下获取函数调用栈的原理,并给出相应的实现方式。 要了解调用栈,首先需要...
  • study_live
  • study_live
  • 2015年01月29日 17:56
  • 1456

函数调用栈打印

Linux打印函数调用栈 方法一:#include #include #include /* Obtain a backtrace and print it to stdout. */ void...
  • u011217649
  • u011217649
  • 2017年03月14日 17:53
  • 609

在C/C++程序中打印当前函数调用栈

在C/C++程序中打印当前函数调用栈 2011年6月11日小武哥发表评论阅读评论       前几天帮同事跟踪的一个程序莫名退出,没有core dump(当然ulimit是打开...
  • rheostat
  • rheostat
  • 2013年01月21日 09:50
  • 13829

C语言函数调用及栈帧结构

一、地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念,真正的代码及数据都存在物理内存中。 物理储存器是指实际存在的具体储存器芯片,CPU在操纵物理储存器的时候都把他们当做内存来对待...
  • qq_29403077
  • qq_29403077
  • 2016年11月17日 19:10
  • 2409

C语言中的函数调用,栈的使用

本文共包含一下四个部分。C源代码 注释 对应汇编代码:此汇编使用”gcc -S hello.c”命令编译生成,部分删减 栈空间的使用过程:包括5个部分,五张图C源码 int sayhello(int ...
  • u011433762
  • u011433762
  • 2015年11月10日 16:26
  • 3259

编程基础-----c语言打印调用栈

官方介绍: SYNOPSIS         top #include int backtrace(void **buffer, int s...
  • qq_21398167
  • qq_21398167
  • 2016年03月01日 16:56
  • 1119

android打印调用栈的方法

打印调用栈是android平台问题定位的基本方法,如果需要知道谁在调用某个函数,可以在此函数中添加打印调用栈函数,弄清楚函数之间的调用关系。 1. Java层打印调用栈方法 Runtime...
  • dongteen
  • dongteen
  • 2014年04月23日 11:25
  • 5065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行过程中打印出函数调用栈
举报原因:
原因补充:

(最多只允许输入30个字)