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

原创 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是打开...

在C/C++程序里打印调用栈信息

我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好...

用gdb观察函数调用过程中栈上的那些事儿

转载自 http://www.kgdb.info/gdb/using_gdb_to_inside_function_call_stack/ “参数从右到左入栈”,“局部变量在栈上...

小例子一步一步解释“函数调用过程中栈的变化过程”

1 问题描述   在此之前,我对C中函数调用过程中栈的变化,仅限于了解有好几种参数的入栈顺序,其中的按照形参逆序入栈是比较常见的,也仅限于了解到这个程度,但到底在一个函数A里面,调用另一个函数B的过...

ARM系统中函数调用过程中的参数传递

在嵌入式软件编程中,经常会用到函数调用,之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器R0传递第一个参数,R1传递到第二个..一直到R3传递第四个参数.但是实际上有时可能传...

MIPS 架构上函数调用过程中的堆栈和栈帧

在计算机科学中,Call stack 是指存放某个程序的正在运行的函数的信息的栈。Call stack 由 stack frames 组成,每个 stack frame 对应于一个未完成运行的函数...

输出nginx执行过程中函数调用关系

添加源文件首先在src/core/目录下添加两个文件,分别是my_debug.h和my_debug.c。#ifndef MY_DEBUG_LENKY_H #define MY_DEBUG_LENKY_...

汇编学习笔记:函数调用过程中的堆栈分析

原创作品:陈晓爽(cxsmarkchan) 转载请注明出处 《Linux操作系统分析》MOOC课程 学习笔记 本文通过汇编一段含有简单函数调用的C程序,说明在函数调用过程中堆栈的变化。

24张图详解 寄存器 EBP ESP 在函数调用过程中的作用

c.cpp int g_x=3            /* 因为g_x是全局变量所以编译的时候,它已经被编译到了  数据段中  故:代码段没有它 */ int fun_a...
  • okayu
  • okayu
  • 2017-06-12 13:31
  • 96

函数调用过程中的寄存器状态分析

首先写一个简单的C语言小程序test.c: #include int function(int a, int b, int c) { int var1 = a; return ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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