linux下列印呼叫棧

2021-06-21 11:44:07 字數 723 閱讀 9806

#include #include #include #include "stacktrace.h"

/* 列印呼叫棧的最大深度 */

#define dump_stack_depth_max 16

/* 列印呼叫棧函式 */

void dump_trace() ;

char **stack_strings = null;

int stack_depth = 0;

int i = 0;

/* 獲取棧中各層呼叫函式位址 */

stack_depth = backtrace(stack_trace, dump_stack_depth_max);

/* 查詢符號表將函式呼叫位址轉換為函式名稱 */

stack_strings = (char **)backtrace_symbols(stack_trace, stack_depth);

if (null == stack_strings)

/* 列印呼叫棧 */

printf(" stack trace: \r\n");

for (i = 0; i < stack_depth; ++i)

/* 獲取函式名稱時申請的記憶體需要自行釋放 */

free(stack_strings);

stack_strings = null;

return;

}

列印函式呼叫棧

我有時候對於程式呼叫不明顯的時候,看程式很費勁,這時候我們希望把程式呼叫鏈列印出來。對於庫函式提供了執行緒介面。backtrace backtrace symbols backtrace symbols fd 其實網上的教程都是結合這個示例寫的。我的也不例外。直接上核心部分,如果你想看func 1的...

linux 列印引數呼叫棧和入參資訊

方法1 include include include obtain a backtrace and print it to stdout.void print trace void int main g stack.c g o stack rdynamic 方法2 include include ...

perf列印呼叫棧的過程

perf prepare sample perf callchain get perf callchain 上面的呼叫棧會使用 perf event output 0xffffffff811837f0 perf event output 0x0 0x80 kernel 0xffffffff81183...