在Linux應用程式中列印函式呼叫棧

2021-10-22 14:20:54 字數 1098 閱讀 3687

在linux中列印函式呼叫棧

要求在linux系統的應用程式中寫乙個函式print_stackframe(),用於獲取當前位置的函式呼叫棧資訊

方法execinfo.h庫下的函式backtrace可以得到當前執行緒的函式呼叫棧指標和呼叫棧深度,backtrace_symbols可以將呼叫棧指標轉化為字串資訊。詳見backtraces或在linux命令列執行命令man backtrace.

測試平台

linux核心版本:linux version 4.15.0-45-generic (buildd@lcy01-amd64-027)

gcc版本:gcc version 5.4.0 20160609

ubuntu版本:ubuntu 16.04.5 lts

**1 // created time:    2019-03-08 09:48:30                                               

2 // modified time:   2019-03-08 10:45:25

3  4 #include

5 #include

6  7 #define max_depth (20)

8  9 void func0(void);

10 void func1(void);

11 void func2(void);

12 void print_stackframe(void);

13  

14 void print_stackframe(void)

15 {

16     void * buffer[max_depth];

17     int depth = backtrace(buffer, max_depth);

18     char ** func_names = backtrace_symbols(buffer, depth);

19     for (int i=0; i編譯執行

gcc print_stackframe.c -o print_stackframe -rdynamic

執行可執行檔案:

./print_stackframe

結果

在應用程式中宿主MEF

在應用程式中宿主mef其實非常簡單,只需要建立乙個組合容器物件 compositioncontainer 的例項,然後將需要組合的部件 parts 和當前宿主程式新增到容器中即可。首先需要新增mef框架的引用,既system.componentmodel.composition.dll,詳細如下 塊...

在應用程式中操作NorFlash

相對於操作nandflash,操作norflash相對簡單,因為基本不需要考慮壞塊,norflash也沒有oob區域,也跟ecc沒有一毛錢關係。它的讀寫擦除相對容易。int dealwithnor unsigned int allsize 0 define maxpartitions 40 stru...

在tomcat web應用程式

在tomcat web應用程式 某人曰 在沒其他工具的情況下不會手動新增web應用的程式設計師是乙個菜鳥 軍哥曰 乙個不會使用好的ide開發工具的程式設計師絕對不是乙個好的程式設計師 開發web應用時,不同型別的檔案有嚴格的存放規則,否則不僅可能會使web應用無法訪問,還會導致web伺服器啟動報錯。...