原文鏈接:https://blog.csdn.net/jctian000/article/details/79695006 當我們配置好自動生成core文件的環境後,若不想寫導致崩潰的程式驗證,那要怎麼快速產生core呢?先看下產生core文件的條件:當程式接收到以下UNIX信號會產生core文件: ...
原文鏈接:https://blog.csdn.net/jctian000/article/details/79695006
當我們配置好自動生成core文件的環境後,若不想寫導致崩潰的程式驗證,那要怎麼快速產生core呢?
先看下產生core文件的條件:
當程式接收到以下UNIX信號會產生core文件:
在系統預設動作列,“終止w/core”表示在進程當前工作目錄的core文件中複製了該進程的存儲圖像(該文件名為core,由此可以看出這種功能很久之前就是UNIX功能的一部分)。大多數UNIX調試程式都使用core文件以檢查進程在終止時的狀態。
core文件的產生不是POSIX.1所屬部分,而是很多UNIX版本的實現特征。UNIX第6版沒有檢查條件(a)和(b),並且其源代碼中包含如下說明:“如果你正在找尋保護信號,那麼當設置-用戶-ID命令執行時,將可能產生大量的這種信號”。4.3 + BSD產生名為core.prog的文件,其中prog是被執行的程式名的前1 6個字元。它對core文件給予了某種標識,所以是一種改進特征。
表中“硬體故障”對應於實現定義的硬體故障。這些名字中有很多取自UNIX早先在DP-11上的實現。請查看你所使用的系統的手冊,以確切地確定這些信號對應於哪些錯誤類型。
下麵比較詳細地說明這些信號。
• SIGABRT 調用abort函數時產生此信號。進程異常終止。
• SIGBUS 指示一個實現定義的硬體故障。
• SIGEMT 指示一個實現定義的硬體故障。
EMT這一名字來自PDP-11的emulator trap 指令。
• SIGFPE 此信號表示一個算術運算異常,例如除以0,浮點溢出等。
• SIGILL 此信號指示進程已執行一條非法硬體指令。
4.3BSD由abort函數產生此信號。SIGABRT現在被用於此。
• SIGIOT 這指示一個實現定義的硬體故障。
IOT這個名字來自於PDP-11對於輸入/輸出TRAP(input/output TRAP)指令的縮寫。系統V的早期版本,由abort函數產生此信號。SIGABRT現在被用於此。
• SIGQUIT 當用戶在終端上按退出鍵(一般採用Ctrl-\)時,產生此信號,並送至前臺進
程組中的所有進程。此信號不僅終止前臺進程組(如SIGINT所做的那樣),同時產生一個core文件。
• SIGSEGV 指示進程進行了一次無效的存儲訪問。
名字SEGV表示“段違例(segmentation violation)”。
• SIGSYS 指示一個無效的系統調用。由於某種未知原因,進程執行了一條系統調用指令,
但其指示系統調用類型的參數卻是無效的。
• SIGTRAP 指示一個實現定義的硬體故障。
此信號名來自於PDP-11的TRAP指令。
• SIGXCPU SVR4和4.3+BSD支持資源限制的概念。如果進程超過了其軟C P U時間限制,則產生此信號。
• SIGXFSZ 如果進程超過了其軟文件長度限制,則SVR4和4.3+BSD產生此信號。
每一種信號又對應一個編號,用kill -l命令可以查看具體的對應列表:
找到一種滿足產生core文件條件的信號,用kill 命令對應用程式發送此信號即可:
如: kill -6 6864
kill -11 6864
————————————————
版權聲明:本文為CSDN博主「你好xyz」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jctian000/article/details/79695006