Linux下addr2line命令用法
? ? ? Linux下addr2line命令用于將程序指令地址轉換為所對應的函數名、以及函數所在的源文件名和行號。當含有調試信息(-g)的執行程序出現crash時(core dumped),可使用addr2line命令快速定位出錯的位置。
? ? ? 如果無法確定文件名或函數名,addr2line將在它們的位置打印兩個問號;如果無法確定行號,addr2line將打印0或一個問號。
? ? ? 參數說明:
? ? ? (1).-a:在函數名、文件名和行號信息之前,以十六進制形式顯示地址。
? ? ? (2).-b:指定目標文件的格式為bfdname。
? ? ? (3).-C:將低級別的符號名解碼為用戶級別的名字。
? ? ? (4).-e:指定需要轉換地址的可執行文件名,默認文件是a.out。
? ? ? (5).-f:在顯示文件名、行號信息的同時顯示函數名。
? ? ? (6).-s:僅顯示每個文件名(the base of each file name)去除目錄名。
? ? ? (7).-i:如果需要轉換的地址是一個內聯函數,則還將打印返回第一個非內聯函數的信息。
? ? ? (8).-j:讀取指定section的偏移而不是絕對地址。
? ? ? (9).-p:使打印更加人性化:每個地址(location)的信息都打印在一行上。
? ? ? (10).-r:啟用或禁用遞歸量限制。
? ? ? (11).--help:打印幫助信息。
? ? ? (12).--version:打印版本號。
? ? ? dmesg命令:全稱為display message,用來顯示Linux內核環形緩沖區信息。
? ? ? 測試代碼main.cpp如下:
#include <stdio.h>int divide(int a, int b)
{return a/b;
}int main()
{fprintf(stdout, "input value\n");int a = 3, b = 0;int div = divide(a, b);fprintf(stdout, "div value: %d\n", div);return 0;
}
? ? ? 在終端輸入以下命令:注意不要忘記-g,否則在使用addr2line命令時無法顯示文件名和行號
g++ -g main.cpp -o main
? ? ? 執行main,輸出結果如下:
? ? ? 通過dmesg命令查看系統日志的錯誤信息,結果如下:其中ip字段后面的數字4005c4就是main程序出錯時所執行的位置
?? ? ? 通過addr2line命令將地址4005c4轉換定位到代碼中出錯的位置,命令及執行結果如下:可見crash的地方在main.cpp文件的第5行,在divide函數中
總結
以上是生活随笔為你收集整理的Linux下addr2line命令用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3中迭代器介绍
- 下一篇: Python3中生成器介绍