Linux打印函数调用栈

应用程序打印调用栈

定义dump_stack函数如下:

#include <execinfo.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <stdio.h> 
#define STR_SIZE 100 
#define STACK_MUN 100 

void dump_stack()
{ 
   int j, strack_num; 
   void *strack_buffer[STACK_MUN]; 
   char **symb_string; 

   strack_num = backtrace(strack_buffer, STR_SIZE); 

   printf("\n ********* print_trace *********\n");
   printf("  There are %d addresses:\n", strack_num); 
   /* The call backtrace_symbols_fd(strack_buffer, strack_num, STDOUT_FILENO) 
    *  would produce similar output to the following: */ 
   symb_string = backtrace_symbols(strack_buffer, strack_num); 
   if (symb_string == NULL) { 
       perror("backtrace_symbols"); 
       exit(EXIT_FAILURE); 
   } 
   for (j = 0; j < strack_num; j++) 
       printf("%s\n", symb_string[j]); 

   free(symb_string); 
   printf(" ********* print_trace end *********\n\n\n"); 
} 

在代码中调用该函数


static gboolean plugin_init(GstPlugin *plugin)
{
  g_print("%s in.\n",__FUNCTION__);
  print_trace();
  /* FIXME Remember to set the rank if it's an element that is meant
     to be autoplugged by decodebin. */
  return gst_element_register(plugin, "testvideofilter", GST_RANK_NONE,
                              GST_TYPE_ZMVIDEOFILTER);
}

输出如下:

plugin_init in.

 ********* print_trace *********
  There are 13 addresses:
/home/plugin-03-Test/bin/libtestvideofilter.so(print_trace+0x2e) [0x7fc12c5a35b6]
/home/plugin-03-Test/bin/libtestvideofilter.so(+0x23df) [0x7fc12c5a43df]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xb857b) [0x7fc12ddd557b]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xb9800) [0x7fc12ddd6800]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(gst_plugin_load_file+0x25) [0x7fc12ddd59cb]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xbe5e8) [0x7fc12dddb5e8]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xbe9f5) [0x7fc12dddb9f5]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xbf2f0) [0x7fc12dddc2f0]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(+0xbf467) [0x7fc12dddc467]
/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0(_gst_plugin_loader_client_run+0x21e) [0x7fc12dddaf27]
/libexec/gstreamer-1.0/gst-plugin-scanner(+0xbe5) [0x55a399862be5]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7fc12d5f4bf7]
/winstream/libexec/gstreamer-1.0/gst-plugin-scanner(_start+0x2a) [0x55a399862a0a]
 ********* print_trace end *********

内核空间打印调用栈

内核直接提供了dump_stack函数,头文件linux/kernel.h

dump_stack();

直接调用该函数即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值