如何解決段錯誤_應用程序錯誤怎么修復程序運行時崩潰應該是經常遇到的事情,本篇文中就來講解一下在Linux下如何解決程序崩潰,也就是發生了段錯誤之后找到程序具體出錯的地方。如果程序通過了編譯,但是在使用命令./a.out運行時程序崩潰了,即顯示段錯誤()其實系統會在程序崩潰的那一剎那將整個內核的信息記錄在一個文件里邊,(ls并不會看到這個文件)使用命令-a...
大家好,我是架構君,一個會寫代碼吟詩的架構師。今天說一說如何解決段錯誤_應用程序錯誤怎么修復,希望能夠幫助大家進步!!!
程序運行時崩潰應該是經常遇到的事情,本篇文中就來講解一下在Linux下如何解決程序崩潰,也就是發生了段錯誤之后找到程序具體出錯的地方。
如果程序通過了編譯,但是在使用命令 ./ a.out 運行時程序崩潰了,即顯示 段錯誤(core )
其實系統會在程序崩潰的那一剎那將整個內核的信息記錄在一個文件里邊,(ls 并不會看到這個文件)
使用命令 -a 打開這個文件 發現這個文件大小缺省為0 文件根本就裝不進去
那么就需要我們手動將這個文件的大小改大一點。
使用 命令 -c 10240 (10240的位置可以是任意一個比較大的數字)
然后再利用 ./ 執行一次。
當再次使用 ls
查看會發現這個 core.3288文件就存在了 ----(3288表示產生這個文件的進程的 ID)
可以使用命令 file core.3288 ,將core.3288這個文件的具體信息給顯示出來,命令最后會顯示這個core文件是通過哪個文件產生的(假如是a.out)
PS:file命令是用來探測給定文件的類型。file命令對文件的檢查分為文件系統、魔法幻數檢查和語言檢查3個過程。
接下來來調試分析問題到底出現在哪
使用命令 gdb 產生該core文件的文件名 core文件文件名 比如說 gdb a.out core.11277 然后回車
這個時候就會直接告訴我們問題出在哪個函數哪一行。
需要說明一下的是當前已經進入了調試模式,按 q 退出調試模式,然后就可以vim 我們的源文件根據錯誤信息修改我們的代碼了。
注意:調段錯誤,編譯的時候一定要加入-g選項,要不然在最后顯示錯誤的時候只會顯示錯的地址,而不會顯示錯誤的具體信息
下邊就以一個極其簡單的例子來具體顯示一下解決段錯誤的整個過程
使用命令 vim test.c 打開test.c這個源文件,按 i 進行編輯,輸入如下程序
很明顯這個程序是有問題的,在函數中,對NULL進行了解引用,這勢必會導致程序崩潰,接下來就來通過這個簡單的問題代碼來幫助理解怎么解決斷錯誤。
使用:wq 退出 test.c 這個文件回到命令模式,利用命令 gcc -g test.c 編譯test.c,順利通過編譯。
使用命令 ls查看一下中文系統編譯的程序在英文系統跑崩潰,發現多了一個a.out 可執行文件。
然后再使用命令./a.out 執行,這個時候問題就來了
使用命令 -a
重新運行一下然后再次使用 ls 命令查看中文系統編譯的程序在英文系統跑崩潰,多了一個 core文件
利用命令 file core.3288查看一下這個文件的具體信息
然后使用命令 gdb a.out core.3288
最后 按 q 退出調試模式,然后修改我們的代碼就OK了。
總結:
解決段錯誤主要就是如下幾個步驟
step1:gcc -g
step2: -c 10240
step3 : ./a.out
step4 : gdb a.文件