有些時候我們在一段C代碼的時候,由于對一個非法內(nèi)存進(jìn)行了操作,在程序運(yùn)行的過程中,出現(xiàn)了"段錯誤"。
呵呵,這種問題我想很多人會經(jīng)常遇到。遇到這種問題是非常無語的,只是提示了"段錯誤",接著什么都沒 有,如果我們一味的去看代碼找太疼苦了,因?yàn)槲覀兌枷嘈抛约簩懙拇a沒問題,現(xiàn)實(shí)就是現(xiàn)實(shí)。下面介紹一種方法,可以有效的定位出現(xiàn)"段錯誤的地方"。
當(dāng)我們的程序崩潰時,內(nèi)核有可能把該程序當(dāng)前內(nèi)存映射到core文件里,方便程序員找到程序出現(xiàn)問題的地方。
什么是core dump?
core的意思是內(nèi)存,dump的意思是扔出來,堆出來。
為什么沒有core文件生成呢?
有時候程序down了,但是core文件卻沒有生成.core文件的生成跟你當(dāng)前系統(tǒng)的環(huán)境設(shè)置有關(guān)系,可以用下面的語句設(shè)置一下便生成core文件了
ulimit -c unlimited
core 文件生成的位置一般于運(yùn)行程序的路徑相同,在ubuntu下文件名一般 為core.
什么是core文件
當(dāng)一個程序奔潰時,在進(jìn)程當(dāng)前工作目錄的core文件中復(fù)制了該進(jìn)程的存儲圖像。core文件僅僅是一個內(nèi)存映像(同時加上調(diào)試信息),主要用來調(diào)試的。
下面我們來看看,怎樣利用core文件來定位我們出現(xiàn)"段錯誤"的地方.
程序運(yùn)行結(jié)果:
從上面我們可以看出,第一次運(yùn)行程序出現(xiàn)"段錯誤"并沒有出現(xiàn)core文件,一般linux操作系統(tǒng)默認(rèn)core文件的大小都是0,需要手動設(shè)置一下。
調(diào)試core文件
core文件是個二進(jìn)制文件,需要用相應(yīng)的工具來分析程序崩潰時的內(nèi)存映像。
linux下可以用gdb來調(diào)試core文件 。
從上面我們可以清楚的看到我們的程序是在那個地方出現(xiàn)了錯誤。