歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux C程序異常退出怎麼辦——core文件幫你忙

想必你一定遇到過Linux下程序異常退出的問題,異常退出貌似有一種神奇的魔力,會讓你神經突然緊張。不要怕,Linux是很強大的,在程序退出的時候,會在可執行文件所在的目錄生成一個core文件,它很好地記錄了一些神秘而又必要的東西,幫助你定位到錯誤的根源,想想以前面試的時候人家聞到core文件,我答不上來,你說面試官會怎樣想,那麼就來說說core文件。

core文件實際上就是一個內存映象同時加上一些調試信息。

首先,你得打開系統的core文件生成開關吧,終端中輸入ulimit -c命令,若顯示0表示當前開關是關閉的。修改當前用戶的.bash_profile文件(順便說一句,不要動不動就用root用戶修改/etc/profile文件,因為工作中是這樣的,別開玩笑了,程序猿一輩子不會有root權限,你要做的是改掉root的習慣,就像你走向社會後,你要注意自己不是皇帝),打開它在末尾加上ulimit -c unlimited,保存退出。然後終端輸入source .bash_profile後我們的設置就會生效了。這時再輸入ulimit -c顯示的就是unlimited了,ulimited生成的core文件的大小不受限制,當讓你也可以限制大小,如ulimit -c 10,表示生成的core文件大小限制在10K,不過我們一般不這樣做,這樣可能會導致生成的core文件不完整,還有一個原因,有的是磁盤空間,任性。

說了這麼多,看一個簡單的例子吧。

代碼如下:

#include <stdio.h>
#include <stdlib.h>
void main()
{
 char *p ;
 free(p);
}

代碼如此的簡單,我只是想說明問題,將它編譯成可執行文件吧,編譯的時候加上-g參數,執行這個程序,啪,崩潰了。

 

可以看到當前目錄下生成了core.xxx文件,如何來查看錯誤出現在哪呢。

當前目錄下輸入gdb test core.xxx (說明,bin代表當前程序的名字)

再輸入where命令,就可以看到錯誤的根源,如下圖:

表示在源文件test.c 中第六行的代碼有問題,再去看看源文件對應的代碼,free(p),顯然char *p是沒有分配任何空間,當然不能去釋放。

core文件就這麼簡單,你好意思不會?

Copyright © Linux教程網 All Rights Reserved