日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈

發(fā)布時(shí)間:2024/4/17 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

下面是一個(gè)小例子,說明了程序出現(xiàn)段錯(cuò)誤時(shí),如何打印程序的堆棧信息。

#include

#include

#include

#include

static void WidebrightSegvHandler(int signum)

{

void *array[10];

size_t size;

char **strings;

size_t i, j;

signal(signum, SIG_DFL); /* 還原默認(rèn)的信號(hào)處理handler */

size = backtrace (array, 10);

strings = (char **)backtrace_symbols (array, size);

fprintf(stderr, "widebright received SIGSEGV! Stack trace:\n");

for (i = 0; i < size; i++) {

fprintf(stderr, "%d %s \n",i,strings[i]);

}

free (strings);

exit(1);

}

int invalide_pointer_error(char * p)

{

*p = 'd'; //讓這里出現(xiàn)一個(gè)訪問非法指針的錯(cuò)誤

return 0;

}

void error_2(char * p)

{

invalide_pointer_error(p);

}

void error_1(char * p)

{

error_2(p);

}

void error_0(char * p)

{

error_1(p);

}

int main()

{

//設(shè)置 信好的處理函數(shù)

signal(SIGSEGV, WidebrightSegvHandler); // SIGSEGV 11 CoreInvalid memory reference

signal(SIGABRT, WidebrightSegvHandler); // SIGABRT 6 CoreAbort signal from

char *a = NULL;

error_0(a);

exit(0);

}

然后為了定位錯(cuò)誤,我們需要加上-g參數(shù)編譯一個(gè)帶調(diào)試信息的版本,程序運(yùn)行后打印堆棧信息如下

widebright received SIGSEGV! Stack trace:

0 ./a.out [0x8048580]

1 [0xb7fb3400]

2 ./a.out [0x8048636]

3 ./a.out [0x8048649]

4 ./a.out [0x804865c]

5 ./a.out [0x80486a9]

6 /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb7e52775]

7 ./a.out [0x80484c1]

知道了函數(shù)的地址可以有三種方法獲取函數(shù)所在的文件和名稱等相關(guān)信息。

使用GDB調(diào)試工具定位和調(diào)試錯(cuò)誤。

info line *0x8048580 打印地址0x8048580處的相關(guān)信息。

list *0x8048580 獲取地址0x8048580相關(guān)的上下文代碼信息。

然后便可以確定行號(hào),進(jìn)行g(shù)db調(diào)試了。

使用GCC編譯選項(xiàng)生成MAP文件查找地址對(duì)應(yīng)的函數(shù)信息。

使用GCC編譯選項(xiàng)生成MAP文件查找地址對(duì)應(yīng)的函數(shù)信息。在通過gcc/g++間接調(diào)用鏈接程序ld時(shí),所有的ld選項(xiàng)前必須加上“-Wl,”,因?yàn)?Map是ld的選項(xiàng)。所以,要讓g++生成mapfile,需要增加編譯參數(shù)“ -Wl,-Map,mapfile”。

例:gcc -o helloworld helloworld.c -Wl,-Map,helloworld.map

然后通過map文件來查看函數(shù)的地址和函數(shù)名的對(duì)應(yīng)關(guān)系了。

使用 Addr2line 將函數(shù)地址解析為函數(shù)名。 Addr2line 工具(它是標(biāo)準(zhǔn)的 GNU Binutils 中的一部分)是一個(gè)可以將指令的地址和可執(zhí)行映像轉(zhuǎn)換成文件名、函數(shù)名和源代碼行數(shù)的工具。這種功能對(duì)于將跟蹤地址轉(zhuǎn)換成更有意義的內(nèi)容來說簡(jiǎn)直是太棒了。 注意編譯程序時(shí)需要添加-g選項(xiàng)才可以,也可以添加-Wl 和-map選項(xiàng)。 在調(diào)用 Addr2line 工具時(shí),要使用 -e 選項(xiàng)來指定可執(zhí)行映像是 test。通過使用 -f 選項(xiàng),可以告訴工具輸出函數(shù)名。 例如:addr2line 0x08048258 -e test -f

總結(jié)

以上是生活随笔為你收集整理的linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜福利电影一区二区 | 色呦呦国产 | 波多野结衣中文字幕在线 | 天天艹天天爽 | 国产精品视频一 | 日韩无马 | 91亚洲国产成人精品一区二三 | 久久久青青草 | 日韩av中文字幕在线免费观看 | 亚洲一区 在线播放 | 真人毛片视频 | 一级成人黄色片 | 九草网| 天天射日日操 | 欲色av| 性工作者十日谈 | 蜜桃精品在线观看 | 欧美a级在线免费观看 | 人妖一区 | 日本精品影院 | 欧美成人一级视频 | 亚洲影院在线观看 | 国产精品99精品久久免费 | 污污内射在线观看一区二区少妇 | 久久国产麻豆 | 成人免费观看视频 | 99热在线只有精品 | 农村黄色片 | 人人人超碰 | 色久视频 | 美女毛片视频 | 国产中文一区二区 | 精品人妻一区二区三区麻豆91 | 午夜婷婷丁香 | 西方裸体在线观看 | 久久精品国产精品亚洲毛片 | 少妇高清精品毛片在线视频 | 日本黄网在线观看 | 强制憋尿play黄文尿奴 | 久久色图 | 91黄色看片| 日本在线激情 | 污站在线观看 | av资源部| 欧美日韩亚洲一区二区三区 | 日韩少妇一区二区三区 | 五月天色网站 | 五月天婷婷基地 | 亚洲美女综合网 | 国产第一页在线 | 日韩大片在线观看 | 看av的网址 | 欧美丝袜脚交 | 色五丁香| 中日韩午夜理伦电影免费 | 在线国产区 | 国产精品178页 | 性生交大片免费看l | 北条麻妃一区二区三区免费 | 亚洲免费高清 | 青青草午夜 | 撒尿free性hd | 最新91在线 | 福利视频黄色 | 日韩啪| 日本午夜一级 | 精品视频在线观看免费 | 亚洲图片欧美另类 | 中文字幕亚洲一区 | 国产精品尤物视频 | 久草天堂| 91视频免费观看 | 中文字幕五区 | 七仙女欲春2一级裸体片 | 久久久一区二区三区四区 | 精品国产18久久久久久二百 | 天天谢天天干 | 欧美风情第一页 | 91麻豆精品一区二区三区 | 日韩三级在线播放 | 99精品偷自拍 | 密乳av| 日韩精品无码一区二区三区 | 日本国产在线视频 | 国产精品一区免费观看 | 91搞搞| 村上凉子av| h视频网站在线观看 | 亚洲国产一区二区在线 | 黄色的网站在线观看 | 骑骑上司妻电影 | 天天视频入口 | 国产成人愉拍精品久久 | 森泽佳奈中文字幕 | 香蕉福利 | 视频一区二区免费 | 人人干人人草 | 91喷水 | 亚洲 欧美 日韩 国产综合 在线 |