1. 程式人生 > >在linux kernel中列印函式呼叫的堆疊的方法

在linux kernel中列印函式呼叫的堆疊的方法

在linux核心除錯中,經常用到的列印函式呼叫堆疊的方法非常簡單,只需在需要檢視堆疊的函式中加入:

dump_stack();或 __backtrace();即可。

dump_stack()在~/kernel/ lib/Dump_stack.c中定義

void dump_stack(void)
{
 printk(KERN_NOTICE
  "This architecture does not implement dump_stack()/n");
}

__backtrace()的定義在~/kernel/arch/arm/lib/backtrace.S中

ENTRY(__backtrace)
  mov r1, #0x10
  mov r0, fp

在linux應用程式除錯中,使用的方法是:

backtrace
backtrace_symbols

可以在函式中加入如下程式碼:

 void *bt[20]; 
 char **strings; 
 size_t sz;

 sz = backtrace(bt, 20); 
 strings = backtrace_symbols(bt, sz); 
        for(i = 0; i < sz; ++i) 
                fprintf(stderr, "%s/n", strings[i]);

還有一個帖子總結了在各種平臺和語言中列印backtrace的方法: