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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

addr2line探秘(没有core怎么办)

發(fā)布時間:2024/4/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 addr2line探秘(没有core怎么办) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://www.cnblogs.com/li-hao/archive/2013/04/03/2997807.html


在Linux下寫C/C++程序的程序員,時常與Core Dump相見。在內(nèi)存越界訪問,收到不能處理的信號,除零等錯誤出現(xiàn)時,我們精心或不精心寫就的程序就直接一命嗚呼了,Core Dump是Linux仁慈地留下的程序的尸體,幫助程序員們解決了一個又一個問題。

有時配置不給力,Linux直接毀尸滅跡,沒有了Core文件;又有時,剛好磁盤空間不足,Core文件寫不下了。沒有Core文件的時候,如何知道程序在什么地方出錯了呢?addr2line就在這時派上用場。

這是一個示例程序,func函數(shù)返回參數(shù)a除以參數(shù)b的結(jié)果。這里使用0作為除數(shù),結(jié)果就是程序因為除以0導致錯誤,直接中斷了。

  • #include?<STDIO?h=""> ??
  • ??
  • int?func(int?a,?int?b)??
  • {??
  • ??return?a?/?b;??
  • }??
  • ??
  • int?main()??
  • {??
  • ??int?x?=?10;??
  • ??int?y?=?0;??
  • ??printf("%d?/?%d?=?%d\n",?x,?y,?func(x,?y));??
  • ??return?0;??
  • }??
  • </STDIO>??
  • #include int func(int a, int b) {return a / b; }int main() {int x = 10;int y = 0;printf("%d / %d = %d\n", x, y, func(x, y));return 0; }

    ?

    使用

    $ gcc -o test1 -g test1.c

    編譯程序,test1.c是程序文件名。執(zhí)行程序,結(jié)果程序異常中斷。查看系統(tǒng)dmesg信息,發(fā)現(xiàn)系統(tǒng)日志的錯誤信息:

    [54106.016179] test1[8352] trap divide error ip:400506 sp:7fff2add87e0 error:0 in test1[400000+1000]

    這條信息里的ip字段后面的數(shù)字就是test1程序出錯時所程序執(zhí)行的位置。使用addr2line就可以將400506轉(zhuǎn)換成出錯程序的位置:

    $ addr2line -e test1 400506 /home/hanfoo/code/test/addr2line/test1.c:5

    這里的test1.c:5指的就是test1.c的第5行

  • return?a?/?b;??
  • return a / b;

    也正是這里出現(xiàn)的錯誤。addr2line幫助我們解決了問題。

    ?

    addr2line如何找到的這一行呢。在可執(zhí)行程序中都包含有調(diào)試信息,其中很重要的一份數(shù)據(jù)就是程序源程序的行號和編譯后的機器代碼之間的對應關系Line Number Table。DWARF格式的Line Number Table是一種高度壓縮的數(shù)據(jù),存儲的是表格前后兩行的差值,在解析調(diào)試信息時,需要按照規(guī)則在內(nèi)存里重建Line Number Table才能使用。

    Line Number Table存儲在可執(zhí)行程序的.debug_line域,使用命令

    $ readelf -w test1

    可以輸出DWARF的調(diào)試信息,其中有兩行

  • Special?opcode?146:?advance?Address?by?10?to?0x4004fe?and?Line?by?1?to?5??
  • Special?opcode?160:?advance?Address?by?11?to?0x400509?and?Line?by?1?to?6??
  • Special opcode 146: advance Address by 10 to 0x4004fe and Line by 1 to 5 Special opcode 160: advance Address by 11 to 0x400509 and Line by 1 to 6

    這里說明機器二進制編碼的0x4004fe位置開始,對應于源碼中的第5行,0x400509開始就對應與源碼的第6行了,所以400506這個地址對應的是源碼第5行位置。

    ?

    addr2line通過分析調(diào)試信息中的Line Number Table自動就能把源碼中的出錯位置找出來,再也不怕Linux毀尸滅跡了。

    總結(jié)

    以上是生活随笔為你收集整理的addr2line探秘(没有core怎么办)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 破处视频在线观看 | 亚洲成av| 五级 黄 色 片 | 男人的天堂黄色 | 30一40一50老女人毛片 | 欧美老女人性生活 | av一区在线观看 | 美女诱惑一区 | 国产精品久久久久久久久久久新郎 | 露脸丨91丨九色露脸 | 亚洲av永久无码精品放毛片 | 亚洲一级av无码毛片精品 | 4438亚洲最大 | 波多野结衣视频免费在线观看 | 日韩精品你懂的 | 久久一区二区三区视频 | 毛片成人网| 国产综合图片 | 国产熟女一区二区三区五月婷 | 国产精品极品白嫩在线 | 国产乱xxⅹxx国语对白 | 小镇姑娘国语版在线观看免费 | 高h放荡受浪受bl | 成人交配视频 | wwwxxx亚洲| 欧美一区二区三区四区五区六区 | 久操亚洲| 极品色综合| 91亚洲一线产区二线产区 | 国产亚洲综合精品 | 亚洲精品无人区 | 很污很黄的网站 | 日韩国产成人 | 日本中文在线视频 | 成人在线手机视频 | aa在线视频| 国精产品一区二区 | 最近免费中文字幕大全免费版视频 | 猫咪av在线| 日朝毛片 | 国产成人精品一区二区三区在线 | 激情图片网站 | 国产高清成人 | 精品一性一色一乱农村 | 97超碰免费在线 | 日韩高清在线播放 | 激情网色 | 日韩成人高清在线 | 久久久伦理片 | 久久中文字幕人妻 | 日日夜夜狠 | 欧美色女人 | 久草中文视频 | 欧美做受喷浆在线观看 | xxxxhd欧美 | 欧美日a | 精品久久久久成人码免费动漫 | 国产一区二区三区在线视频 | 久久国产视频网站 | 亚洲人在线播放 | 熟妇的味道hd中文字幕 | 麻豆免费观看视频 | 日韩一区二区三区av | 97色涩| 日韩网红少妇无码视频香港 | 黄色一级片黄色一级片 | 成人黄色大片在线观看 | 国产视频二区三区 | 男受被做哭激烈娇喘gv视频 | 国产精品一区二区无线 | 色中色综合网 | 日韩美女中文字幕 | 日韩精品免费一区二区三区 | 欧美精品一区二区三区久久 | 最近中文字幕在线中文高清版 | 狠色综合7777夜色撩人 | 五十路妻| 免费公开在线视频 | 靠逼动漫 | 男女操操操 | 91麻豆精品91久久久久同性 | 在线免费观看av的网站 | 七月丁香婷婷 | 91视频国产精品 | 91国在线观看 | 日韩精品一区在线观看 | 欧美绿帽交换xxx | 国产免费黄色大片 | 欧美com | 北条麻妃一区二区三区在线观看 | 99riav国产在线观看 | 综合色播 | 欧洲一区二区三区在线 | 国产精品波多野结衣 | 丝袜性爱视频 | 亚洲精品影院在线 | 欧美精品一区二区在线播放 | 亚洲欧美精选 | 最新免费av网站 |