原文鏈接: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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/148719.html
標籤:Linux
