關於SIGSEGV錯誤及處理方法
阿新 • • 發佈:2017-08-04
pre 數據訪問 gdb bus 程序 調用棧 bsp 處理 clas
SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:
1.buffer overflow --- usually caused by a pointer reference out of range.
2.stack overflow --- please keep in mind that the default stack size is 8192K.
3.illegal file access --- file operations are forbidden on our judge system.
(2)SIGBUS與SIGSEGV信號的一般區別如下:
1) SIGBUS(Bus error)意味著指針所對應的地址是有效地址,但總線不能正常使用該指針。通常是未對齊的數據訪問所致。
2) SIGSEGV(Segment fault)意味著指針所對應的地址是無效地址,沒有物理內存對應該地址。 (3)Linux的mmap(2)手冊頁
--------------------------------------------------------------------------
使用映射可能涉及到如下信號
SIGSEGV
試圖對只讀映射區域進行寫操作
SIGBUS
試圖訪問一塊無文件內容對應的內存區域,比如超過文件尾的內存區域,或者以前有文件內容對應,現在為另一進程截斷過的內存區域。
--------------------------------------------------------------------------
弄清楚錯誤以後,就要查找產生錯誤的根源,一般我用以下兩種方法:
(1)gcc -g 編譯
ulimit -c 20000
之後運行程序,等core dump
最後gdb -c core <exec file> 來查調用棧 (2)使用strace execfile,運行程序,出錯時會顯示那個系統調用錯
http://blog.csdn.net/brace/article/details/1102422
今天編程遇到了SIGSEGV錯誤,比較困惑,所以找了些資料,總結一下: (1)官方說法是:SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:
1.buffer overflow --- usually caused by a pointer reference out of range.
2.stack overflow --- please keep in mind that the default stack size is 8192K.
3.illegal file access --- file operations are forbidden on our judge system.
1) SIGBUS(Bus error)意味著指針所對應的地址是有效地址,但總線不能正常使用該指針。通常是未對齊的數據訪問所致。
2) SIGSEGV(Segment fault)意味著指針所對應的地址是無效地址,沒有物理內存對應該地址。 (3)Linux的mmap(2)手冊頁
--------------------------------------------------------------------------
使用映射可能涉及到如下信號
SIGSEGV
試圖對只讀映射區域進行寫操作
SIGBUS
試圖訪問一塊無文件內容對應的內存區域,比如超過文件尾的內存區域,或者以前有文件內容對應,現在為另一進程截斷過的內存區域。
--------------------------------------------------------------------------
ulimit -c 20000
之後運行程序,等core dump
最後gdb -c core <exec file> 來查調用棧 (2)使用strace execfile,運行程序,出錯時會顯示那個系統調用錯
關於SIGSEGV錯誤及處理方法