加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

不再懼怕Linux內(nèi)核panic (二) 認(rèn)識DWARF

05/06 10:30
2107
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

哈嘍,大家好,我是LittleG。

前言

《不再懼怕Linux內(nèi)核panic (一)》系列

當(dāng)內(nèi)核發(fā)生panic之后,事后要想根據(jù)debug信息,推導(dǎo)源碼位置/行號等調(diào)試信息時(shí),就不得不提到 DWARF?格式的調(diào)試信息,依稀記得曾經(jīng)我們就碰過一次因DWARF版本適配不對導(dǎo)致調(diào)試信息不全,阻塞了panic問題分析,出現(xiàn)進(jìn)而阻塞了項(xiàng)目進(jìn)度的情況。今天就了解一下?DWARF。

正文

DWARF(Debugging With Attributed Record Formats)是一種廣泛使用的調(diào)試信息格式,它被編譯器用來在編譯程序時(shí)生成關(guān)于源代碼結(jié)構(gòu)、類型信息、變量、函數(shù)、源代碼行號映射等調(diào)試信息。這些信息對于調(diào)試器來說是至關(guān)重要的,因?yàn)樗试S開發(fā)者在沒有源代碼的情況下也能理解程序的內(nèi)部結(jié)構(gòu),并且可以在源代碼級別進(jìn)行調(diào)試。

關(guān)系說明:

Linux: 在Linux系統(tǒng)上,大多數(shù)編譯器(如GCC)默認(rèn)使用DWARF格式來生成調(diào)試信息。這些信息被嵌入到可執(zhí)行文件或動態(tài)庫中,使得GDB等調(diào)試器能夠解析這些信息,為開發(fā)者提供源代碼級別的調(diào)試體驗(yàn)。

ARM:?DWARF是一種與體系結(jié)構(gòu)無關(guān)的格式,這意味著它不僅限于特定的CPU架構(gòu),包括ARM在內(nèi)的各種架構(gòu)的程序都可以使用DWARF來存儲調(diào)試信息。無論是ARM32還是ARM64(AArch64)架構(gòu),DWARF都支持良好,確??缙脚_的調(diào)試能力。

編譯器: 編譯器如GCC、Clang等負(fù)責(zé)在編譯時(shí)生成DWARF調(diào)試信息。開發(fā)人員通過編譯器的命令行選項(xiàng)(如GCC的-g)來控制是否生成以及生成多少調(diào)試信息。

kdump: 是Linux內(nèi)核的一項(xiàng)功能,用于在系統(tǒng)崩潰時(shí)捕獲內(nèi)核的內(nèi)存映像轉(zhuǎn)儲文件(vmcore)。vmcore文件中可能包含DWARF調(diào)試信息,特別是當(dāng)內(nèi)核本身或內(nèi)核模塊是帶有調(diào)試信息編譯時(shí)。使用DWARF信息,開發(fā)者可以更深入地分析內(nèi)核崩潰的原因。

crash工具: 是一個(gè)用于分析Linux內(nèi)核崩潰內(nèi)存映像轉(zhuǎn)儲文件(vmcore)的調(diào)試工具。它利用了DWARF等調(diào)試信息來提供詳細(xì)的內(nèi)核堆棧跟蹤、內(nèi)存內(nèi)容檢查等功能,幫助開發(fā)者診斷和解決問題。

注意事項(xiàng):

確保調(diào)試信息的完整性:在編譯時(shí)使用正確的編譯選項(xiàng)(如-g)來確保生成完整的DWARF信息。

版本兼容性:不同版本的DWARF格式可能不完全向后兼容。確保使用的編譯器、調(diào)試器和分析工具支持目標(biāo)DWARF版本。

性能與空間考量:調(diào)試信息會增加可執(zhí)行文件的大小,可能影響加載時(shí)間和內(nèi)存占用,尤其是對于資源有限的環(huán)境。

安全問題:發(fā)布產(chǎn)品前,應(yīng)移除或混淆調(diào)試信息,避免暴露敏感源代碼細(xì)節(jié)。

潛在問題:

DWARF 1至DWARF 5:每個(gè)新版本都引入了新特性以支持更多編程語言特性、編譯器優(yōu)化等。例如,DWARF 5引入了對C++11特性更好的支持,以及對其他高級語言特性的改進(jìn)。

版本不匹配問題:如果使用了較新版本DWARF生成的調(diào)試信息,而調(diào)試器只支持舊版本,可能會導(dǎo)致調(diào)試信息解析不全或錯(cuò)誤。反之,如果使用的是舊版本DWARF,可能無法充分利用新編譯器提供的調(diào)試特性。

總結(jié):
1、涉及到DWARF版本問題時(shí),注意確保編譯器、調(diào)試器和分析工具都是最新或相同版本,或至少兼容目標(biāo)DWARF版本。對于版本不兼容的情況,可能需要升級或替換工具鏈組件,或者在編譯時(shí)指定兼容舊版本的DWARF輸出選項(xiàng)(如果支持的話)。

2、注意DWARF是一種與體系結(jié)構(gòu)無關(guān)的調(diào)試信息格式。目前廣泛應(yīng)用于包括ARM在內(nèi)的多種處理器架構(gòu)中,是現(xiàn)代編譯器和調(diào)試器之間交換調(diào)試信息的一種標(biāo)準(zhǔn)。

下期見~

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級 參考價(jià)格 更多信息
FOD817ASD 1 onsemi 4-Pin DIP Phototransistor Optocouplers, 1000-REEL

ECAD模型

下載ECAD模型
$0.52 查看
AFBR-5972Z 1 Foxconn Transceiver, 635nm Min, 675nm Max, 100Mbps(Tx), 100Mbps(Rx), Panel Mount, ROHS COMPLIANT PACKAGE
$150.74 查看
KSZ8895MQXI 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER
$6.88 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

記錄和分享C/C++、Linux、ARM、Android、IoT相關(guān)知識。技術(shù)相伴于生活和成長,愿你我永為少年,心中有火,眼中有光,始保熱情。