仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
引言
「哎,段錯誤!」 我仿佛看到了這個句話背後程式師的那張苦瓜臉。 段錯誤對於一個程式師是一個熟悉不能再熟悉的名詞,對於有經驗的程式師對這個詞那是既愛又恨,愛的是:還好出現了段錯誤,非常好找原因的(那是他有幾種能找段錯誤的方法,已經熟透了),恨的是:怎麼總是出現段錯誤(看的都想吐了)。 而對於經驗不足的程式師來說,段錯誤就是一個刺蝟,你想吃他根本無從下嘴,只可遠觀而不可褻玩焉。 針對這種情況雲巢科技在最底層公共庫模組添加了一套專治段錯誤的模組,先拔掉你的刺,在考慮怎麼吃掉你。
1. 段錯誤是什麼
一句話來說,段錯誤是指訪問的記憶體超出了系統給這個程式設定的記憶體空間,例如訪問了不存在的記憶體位址、訪問了系統保護的記憶體位址、訪問了唯讀的記憶體位址等等情況。
2. 段錯誤產生的原因
1> 訪問不存在的記憶體位址。
2> 訪問系統保護的記憶體位址。
3> 訪問唯讀的記憶體位址。
4> 棧溢出,等等其他原因。
3. 段錯誤的調試方法
1> 傳說中printf大法,這個看似最簡單但往往很多情況下十分有效的調試方式,也許可以說是程式師使用最多的調試方式。 但是涉及到大的專案開發和源碼數量超多,使用printf大法就不能快速的去定位問題的所在,你根本就不知道在哪去加printf列印。
2> 使用GDB調試
對於新手的程式師來說,GDB還有很大一部分人不會使用,如果要使用GDB,還要去從新學習GDB的命令和操作,8630.html">有時候會浪費一些時間。
3> 雲巢開發的智慧自動檢測段錯誤模組
沒有複雜的操作,沒有猜代碼的痛苦,只需要調用一個簡單的初始化函數介面,就能智慧的自動檢測出程式產生的段錯誤的位置,定位精准,老少皆宜。
4. 雲巢科技智慧檢測段錯誤模組
1> 基本原理:
通過捕捉系統中產生的段錯誤信號,將段錯誤資訊列印到生成的檔中。
2> 產生段錯誤的信號:
1)SIGQUIT 2)SIGILL 3)SIGABRT 4)SIGFPE 5)SIGSEGV 6)SIGBUS 7)SIGSYS 8)SIGTRAP 9)SIGXCPU 10)SIGXFSZ 11)SIGIOT
我們看到SIGSEGV在其中,一般陣列越界或是訪問空指標都會產生這個信號。 雲巢開發的檢測段錯誤模組,能夠完美的捕捉以上列出的產生段錯誤的信號,並將產生段錯誤信號的行進行準確的定位。 拔掉他身上的刺,為公司的研發人員提供極大方便,提升了工作的效率。 其實段錯誤並不可怕,可怕是沒有一種好的調試段錯誤的方法。 雲巢正是看到了這個方面,開發出智慧檢測段錯誤模組。
5. 開發當中應當注意的事項,避免產生段錯誤
1、出現段錯誤時,首先應該想到段錯誤的定義,從它出發考慮引發錯誤的原因。
2、在使用指標時,定義了指標後記得初始化指標,在使用的時候記得判斷是否為Null。
3、在使用陣列時,注意陣列是否被初始化,陣列下標是否越界,陣列元素是否存在等。
4、在訪問變數時,注意變數所占位址空間是否已經被程式釋放掉。
5、在處理變數時,注意變數的格式控制是否合理等。
免費申請雲巢iPC位址:HTTP://pc.vcnglobal.cn