• 正文
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

2024/05/06
2091
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

哈嘍,大家好,我是LittleG。

前言

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

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

正文

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

關(guān)系說(shuō)明:

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

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

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

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

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

注意事項(xiàng):

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

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

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

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

潛在問(wèn)題:

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

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

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

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

下期見(jiàn)~

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
DS2431Q+T&R 1 Maxim Integrated Products EEPROM, 1KX1, Serial, CMOS, PDSO6, 3 X 3 MM, ROHS COMPLIANT, TDFN-6
$1.6 查看
Q13FC1350000400 1 Seiko Epson Corporation Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom, CERAMIC, SMD, 2 PIN

ECAD模型

下載ECAD模型
$0.36 查看
74HC245D 1 Nexperia Bus Transceiver

ECAD模型

下載ECAD模型
$1.25 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄