段錯誤除錯

2021-08-07 18:17:22 字數 959 閱讀 4980

核心轉儲core dumped

概念:當⼀個程序要異常終止時,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上,檔名通常是core,這叫做core dump。也叫核心轉儲,幫助開發者進行除錯,在程式崩潰時把記憶體資料dump到硬碟上,讓gdb識別 

。乙個程序允許產生多大的core檔案取決於程序的 resource limit(這個資訊儲存在pcb中)。預設是不允許產生core檔案的,因為core檔案中可能包含使用者密碼等敏感資訊,不安全。

用ulimit -a命令檢視系統中的軟硬體資源限制

其中core file size = 0,也就印證了上邊的說法. 

上邊還有其他資源的限制,比如: 

硬碟swap分割槽:用於記憶體資料換入換出的分割槽 

max locked memory:不允許換出的記憶體資料,就被鎖住

但我們在開發除錯階段可以用ulimit命令改變這個限制, 允許產生core檔案:ulimit -c 1024,允許core⽂件最大為1024k

更改後再次執行程式就可以看到core檔案,其檔名後邊的數字就是程序的pid號。

程序異常終止通常是因為有 bug,比如非法記憶體訪問導致段錯誤,事後可以用偵錯程式檢查core檔案以查清錯誤原因,這叫做 post-mortem debug(事後除錯)。

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

段錯誤除錯

1 gdb除錯 1 第一步是使用帶有除錯標誌 debugging flags 的方式編譯這段 如下 gcc g segfault.c 2 執行可執行程式 gdb a.out 進入gdb模式 gdb run 執行程式 starting program home dgawd cpsc 363 a.out...

Linux段錯誤除錯

1.單步除錯 編譯時加上 g,然後用gdb除錯,自然就知道出現段錯誤的地方在哪。2.利用core檔案來進行除錯 用ulimit c來檢視core檔案的最大值,如果是0就不會產生core檔案。此時可用ulimit c 1000將core檔案的最大值設定為1000k。ulimit c 1000只會影響當...

gdb 除錯段錯誤

開發嵌入式linux的時候經常會遇到segmentation fault,也就是段異常錯誤,一般是使用錯誤的指標訪問記憶體導致。這種錯誤可以通過開啟核心的異常資訊輸出,再用gdb對發生段異常的位址進行定位。1.開啟核心的異常資訊輸出 mips的核心 關閉了arch mips mm fault.c的d...