一句話來說,段錯誤是指訪問的記憶體超出了系統給這個程式所設定的記憶體空間,
例如訪問了不存在的記憶體位址、訪問了系統保護的記憶體位址、訪問了唯讀的記憶體位址等等情況。
1.訪問不存在的記憶體位址 (int *ptr = null;*ptr = 0;)
2.訪問系統保護的記憶體位址 (int *ptr = (int *)0;*ptr = 100;)
3.訪問唯讀的記憶體位址
4.棧溢位
1.dmesg
檢視發生段錯誤的程式名稱、引起段錯誤發生的記憶體位址、指令指標位址、堆疊指標位址、錯誤**、錯誤原因
2.makefile -g引數
用於gdb除錯,顯示行號、函式名、傳參
3.nm命令(列出二進位制檔案中的符號表)
包括符號位址、符號型別、符號名(函式名[.text],變數名[.bss .data])等
4.ldd(pc)、嵌入式用***-readelf(實現待定)
1.使用printf/log(業務流程)
2.使用gcc和gdb(core檔案)
3.objdump ldd?
嵌入式 linux下段錯誤的原因和除錯方式
程序通訊:
段錯誤除錯
1 gdb除錯 1 第一步是使用帶有除錯標誌 debugging flags 的方式編譯這段 如下 gcc g segfault.c 2 執行可執行程式 gdb a.out 進入gdb模式 gdb run 執行程式 starting program home dgawd cpsc 363 a.out...
段錯誤除錯
核心轉儲core dumped 概念 當 個程序要異常終止時,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上,檔名通常是core,這叫做core dump。也叫核心轉儲,幫助開發者進行除錯,在程式崩潰時把記憶體資料dump到硬碟上,讓gdb識別 乙個程序允許產生多大的core檔案取決於程序的 ...
段錯產生原因及除錯技巧
產生段錯誤是因為訪問了不該訪問的空間,比如 1 對空指標 指向位址為null的指標 進行操作。2 對野指標 未被初始化的指標 進行操作。3 陣列越界。4 用指針對陣列進行操作,指標偏移到了陣列長度之外。5 對唯讀空間進行操作,比如,操作.rodata空間區域,字串常量 如字串 hello 便是儲存在...