使用libunwind獲取堆棧

#include <stdio.h>
// We only need local unwinder.
#define UNW_LOCAL_ONLY

#include <libunwind.h>

void print_stack_trace()
{
    unw_cursor_t cursor;
    unw_context_t context;

    // 獲取當(dāng)前線程的上下文
    unw_getcontext(&context);

    // 初始化游標(biāo)
    unw_init_local(&cursor, &context);

    // 遍歷函數(shù)調(diào)用堆棧
    while (unw_step(&cursor) > 0) {
        unw_word_t ip;
        unw_get_reg(&cursor, UNW_REG_IP, &ip);

        // 獲取函數(shù)名(如果可用)
        char func_name[256];
        if (unw_get_proc_name(&cursor, func_name, sizeof(func_name), NULL) == 0) {
            printf("Function: %s\n", func_name);
        } else {
            printf("Function: <unknown>\n");
        }

        // 打印指令指針
        printf("IP: %#lx\n", (unsigned long)ip);
    }
}

int main()
{
    print_stack_trace();

    return 0;
}

Ubuntu安裝libunwind
apt-get install libunwind8-dev
編譯命令:
gcc unwind.c -lunwind

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本動(dòng)因 有時(shí)在進(jìn)行大型項(xiàng)目的開發(fā)時(shí),我發(fā)現(xiàn)找出調(diào)用某些函數(shù)或方法的所有位置非常有用。而且,我不僅僅想要直接調(diào)用者...
    墨道院閱讀 19,409評(píng)論 0 11
  • 這半年,華為技術(shù)有限公司(Huawei Technologies Co., Ltd.)站在了全中國(guó)乃至世界的風(fēng)口浪...
    淀粉月刊閱讀 1,302評(píng)論 0 0
  • 瑞芯微板子使用探索【RK3588】 1 信息查看 1.1 查看RK系列 3588硬件信息: 內(nèi)嵌的 NPU 支持 ...
    georgeguo閱讀 7,717評(píng)論 2 5
  • 使用commit理解鏡像構(gòu)成 docker commit 命令除了學(xué)習(xí)之外,還有一些特殊的場(chǎng)合適合使用,比如被入侵...
    懶貓睡醒了閱讀 859評(píng)論 0 0
  • Docker安裝與使用 一、docker安裝。 1、安裝要求: 1)docker要求服務(wù)CentOS6以上,ker...
    卬之別錄閱讀 2,135評(píng)論 0 1

友情鏈接更多精彩內(nèi)容