段錯誤調試

核心轉儲core dumped

概念:當⼀個進程要異常終止時,可以選擇把進程的用戶空間內存數據全部保存到磁盤上,文件名通常是core,這叫做Core Dump。也叫核心轉儲,幫助開發者進行調試,在程序崩潰時把內存數據dump到硬盤上,讓gdb識別 

一個進程允許產生多大的core文件取決於進程的 Resource Limit(這個信息保存在PCB中)。默認是不允許產生core文件的,因爲core文件中可能包含用戶密碼等敏感信息,不安全。

用ulimit -a命令查看系統中的軟硬件資源限制

16 
其中core file size = 0,也就印證了上邊的說法. 
上邊還有其他資源的限制,比如: 
硬盤swap分區:用於內存數據換入換出的分區 
max locked memory:不允許換出的內存數據,就被鎖住

但我們在開發調試階段可以用ulimit命令改變這個限制, 允許產生core文件:ulimit -c 1024,允許core⽂件最大爲1024K

17

更改後再次運行程序就可以看到core文件,其文件名後邊的數字就是進程的pid號。

18

進程異常終止通常是因爲有 Bug,比如非法內存訪問導致段錯誤,事後可以用調試器檢查core文件以查清錯誤原因,這叫做 Post-mortem Debug(事後調試)。

19

如圖,輸入命令就可以直接定位到是SIGQUIT信號引起的進程退出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章