原文鏈接:https://blog.csdn.net/jctian000/article/details/79695006
當(dāng)我們配置好自動(dòng)生成core文件的環(huán)境后,若不想寫導(dǎo)致崩潰的程序驗(yàn)證,那要怎么快速產(chǎn)生core呢?
先看下產(chǎn)生core文件的條件:
當(dāng)程序接收到以下UNIX信號(hào)會(huì)產(chǎn)生core文件:

在系統(tǒng)默認(rèn)動(dòng)作列,“終止w/core”表示在進(jìn)程當(dāng)前工作目錄的core文件中復(fù)制了該進(jìn)程的存儲(chǔ)圖像(該文件名為core,由此可以看出這種功能很久之前就是UNIX功能的一部分)。大多數(shù)UNIX調(diào)試程序都使用core文件以檢查進(jìn)程在終止時(shí)的狀態(tài)。 core文件的產(chǎn)生不是POSIX.1所屬部分,而是很多UNIX版本的實(shí)現(xiàn)特征。UNIX第6版沒有檢查條件(a)和(b),并且其源代碼中包含如下說明:“如果你正在找尋保護(hù)信號(hào),那么當(dāng)設(shè)置-用戶-ID命令執(zhí)行時(shí),將可能產(chǎn)生大量的這種信號(hào)”。4.3 + BSD產(chǎn)生名為core.prog的文件,其中prog是被執(zhí)行的程序名的前1 6個(gè)字符。它對(duì)core文件給予了某種標(biāo)識(shí),所以是一種改進(jìn)特征。
表中“硬件故障”對(duì)應(yīng)于實(shí)現(xiàn)定義的硬件故障。這些名字中有很多取自UNIX早先在DP-11上的實(shí)現(xiàn)。請(qǐng)查看你所使用的系統(tǒng)的手冊(cè),以確切地確定這些信號(hào)對(duì)應(yīng)于哪些錯(cuò)誤類型。
下面比較詳細(xì)地說明這些信號(hào)。
• SIGABRT 調(diào)用abort函數(shù)時(shí)產(chǎn)生此信號(hào)。進(jìn)程異常終止。
• SIGBUS 指示一個(gè)實(shí)現(xiàn)定義的硬件故障。
• SIGEMT 指示一個(gè)實(shí)現(xiàn)定義的硬件故障。 EMT這一名字來自PDP-11的emulator trap 指令。
• SIGFPE 此信號(hào)表示一個(gè)算術(shù)運(yùn)算異常,例如除以0,浮點(diǎn)溢出等。
• SIGILL 此信號(hào)指示進(jìn)程已執(zhí)行一條非法硬件指令。 4.3BSD由abort函數(shù)產(chǎn)生此信號(hào)。SIGABRT現(xiàn)在被用于此。
• SIGIOT 這指示一個(gè)實(shí)現(xiàn)定義的硬件故障。 IOT這個(gè)名字來自于PDP-11對(duì)于輸入/輸出TRAP(input/output TRAP)指令的縮寫。系統(tǒng)V的早期版本,由abort函數(shù)產(chǎn)生此信號(hào)。SIGABRT現(xiàn)在被用于此。
• SIGQUIT 當(dāng)用戶在終端上按退出鍵(一般采用Ctrl-\)時(shí),產(chǎn)生此信號(hào),并送至前臺(tái)進(jìn) 程組中的所有進(jìn)程。此信號(hào)不僅終止前臺(tái)進(jìn)程組(如SIGINT所做的那樣),同時(shí)產(chǎn)生一個(gè)core文件。
• SIGSEGV 指示進(jìn)程進(jìn)行了一次無效的存儲(chǔ)訪問。 名字SEGV表示“段違例(segmentation violation)”。
• SIGSYS 指示一個(gè)無效的系統(tǒng)調(diào)用。由于某種未知原因,進(jìn)程執(zhí)行了一條系統(tǒng)調(diào)用指令, 但其指示系統(tǒng)調(diào)用類型的參數(shù)卻是無效的。
• SIGTRAP 指示一個(gè)實(shí)現(xiàn)定義的硬件故障。 此信號(hào)名來自于PDP-11的TRAP指令。
• SIGXCPU SVR4和4.3+BSD支持資源限制的概念。如果進(jìn)程超過了其軟C P U時(shí)間限制,則產(chǎn)生此信號(hào)。
• SIGXFSZ 如果進(jìn)程超過了其軟文件長(zhǎng)度限制,則SVR4和4.3+BSD產(chǎn)生此信號(hào)。
每一種信號(hào)又對(duì)應(yīng)一個(gè)編號(hào),用kill -l命令可以查看具體的對(duì)應(yīng)列表:
找到一種滿足產(chǎn)生core文件條件的信號(hào),用kill 命令對(duì)應(yīng)用程序發(fā)送此信號(hào)即可:
如: kill -6 6864 kill -11 6864
|