今天, 我們來(lái)介紹一個(gè)linux中的dmesg命令,事實(shí)上, 我們之前用過(guò), 但是沒(méi)有單獨(dú)介紹過(guò)。
看一下dmesg命令的用途吧:
dmesg命令用會(huì)把開(kāi)機(jī)信息存到ring bufer中, 形成一個(gè)緩沖, 免得你我來(lái)不及看。 在root權(quán)限下, 可以用dmesg -c來(lái)清楚這個(gè)消息。 單純的一個(gè)dmesg命令則是用來(lái)輸出這些記錄信息的。
要注意, 程序core dump之后, 并不一定產(chǎn)生core文件, 此時(shí), 我們的重要目的是: 獲取出錯(cuò)堆棧的地址, 而dmesg命令可達(dá)此目的。
下面, 我們來(lái)看一下經(jīng)典的dmesg + addr2line
可見(jiàn), 第6行有錯(cuò), addr2line是我們的老熟人了, 本文主要強(qiáng)調(diào)一下dmesg. 當(dāng)dmesg顯示的信息較多時(shí)候, 我們通過(guò)grep來(lái)過(guò)濾, 比如 dmesg | grep a.out
在實(shí)際開(kāi)發(fā)中, 通常是從日志文件中看到堆棧異常, 同樣是為了拿到堆棧出錯(cuò)的地方, 然后用addr2line來(lái)定位代碼行, 此時(shí), 可以將日志文件看成是dmesg命令的擴(kuò)展。 在這兩種情況下, 我么可以不依賴(lài)于core文件, 便可搞定core dump了。
OK, dmesg命令的介紹就先告一段落了。
聯(lián)系客服