backtrace 调试 代码执行的路径(调用栈)

原创 2017年05月21日 22:01:10

直接贴代码:

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
  
void myfunc3(void)
{
    int j, nptrs;
    #define SIZE 100
    void *buffer[100];
    char **strings;
  
    nptrs = backtrace(buffer, SIZE);
    printf("backtrace() returned %d addresses\n", nptrs);
  
    backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO);
}
  
void myfunc(void)
{
    myfunc3();
}
  
int main(int argc, char *argv[])
{
    myfunc();
    return 0;
}



 程序运行结果:
[home@root ~]$ g++ -rdynamic t.cpp -o t  

这里必须的参数是 -rdynamic 


高效获得Linux函数调用栈/backtrace的方法

有三种方法可以获得Linux的函数调用堆栈,参见CALL STACK TRACE GENERATION 。 在这里简单分析一下文中提到的四个方案: 方法1 GCC内置函数__builtin_retur...
  • littlefang
  • littlefang
  • 2014年12月31日 16:16
  • 12306

使用Backtrace函数打印调用栈 - Debug居家必备

glibc提供了backtrace这个库函数,可以用来打印call stack。比如我们可以在程序中注册常见的一些signal,比如SIGSEGMENT, SIGPIPE,然后在这些信号的回调函数中,...
  • nine_locks
  • nine_locks
  • 2015年09月13日 10:45
  • 698

linux下追踪函数调用堆栈backtrace

一般察看函数运行时堆栈的方法是使用GDB之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。 在头文件"exec...
  • guo8113
  • guo8113
  • 2014年06月18日 21:06
  • 866

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

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

自己动手实现arm函数栈帧回溯

glic中其实有这些函数,当时用的uclib版本较低,没有这些函数,但又需要,只能自己实现了(较高的版本应该有这些函数,换版本很麻烦),而且可以加深自己对这方面的理解.原理性的东西就不深入讲解了,直接...
  • ce123
  • ce123
  • 2013年12月12日 22:38
  • 5346

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

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

Linux调用backtrack函数打印程序崩溃时的调用堆栈

可以给自己的程序都加上这个东西,便于快速的找到错误吧,看到别人都是这么用的 #include #include #include #include //signal 函数用...
  • zm_21
  • zm_21
  • 2014年06月30日 16:57
  • 4616

mips体系堆栈回溯分析与实现

在上家公司做 linux 驱动开发主要基于mips架构,在内核下有一个好玩的函数 dump_stack, 只要调用到这个函数就能把函数的调用栈给打印出来,十分方便,不再需要kgdb断点了。   现...
  • XscKernel
  • XscKernel
  • 2015年08月28日 17:16
  • 3537

Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般出现异常时,我们可以在跑出异常时也将堆栈情况打印出来,这样十分方便错误查找。另外实际上也有一个非常有用的功能:分析代码的行为。android代码太过庞大了,完全的静态分析...
  • freshui
  • freshui
  • 2013年07月26日 10:38
  • 78560

获取任意线程调用栈的那些事

BSBacktraceLogger 是一个轻量级的框架,可以获取任意线程的调用栈,开源在我的 GitHub,建议下载下来结合本文阅读。 我们知道 NSThread 有一个类方法 callstackSy...
  • abc649395594
  • abc649395594
  • 2016年08月29日 09:51
  • 6675
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:backtrace 调试 代码执行的路径(调用栈)
举报原因:
原因补充:

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