演武場之“我與經(jīng)典代碼”分享-段錯誤調(diào)試_第1頁
演武場之“我與經(jīng)典代碼”分享-段錯誤調(diào)試_第2頁
演武場之“我與經(jīng)典代碼”分享-段錯誤調(diào)試_第3頁
演武場之“我與經(jīng)典代碼”分享-段錯誤調(diào)試_第4頁
演武場之“我與經(jīng)典代碼”分享-段錯誤調(diào)試_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

演武場之“我與經(jīng)典代碼”分享—段錯誤調(diào)試編制日期:2016-1-4編制人員:馬MM目錄演講目的段錯誤調(diào)試方法代碼性質(zhì)黑代碼EPS組件模塊-SPS-PAI_V11問題引入通常linux環(huán)境下的項目開發(fā)中,經(jīng)常會遇到段錯誤‘Segmentationfault’問題,這里我對linux環(huán)境下出現(xiàn)的段錯誤做一個簡單小結(jié)。段錯誤的產(chǎn)生段錯誤是指訪問的內(nèi)存超出了系統(tǒng)給程序所設定的內(nèi)存空間,例如訪問了不存在的內(nèi)存地址、訪問了系統(tǒng)保護的內(nèi)存地址、訪問了只讀的內(nèi)存地址等等情況。int*ptr=NULL;

*ptr=0;char*ptr="test";strcpy(ptr,"TEST");4訪問了只讀的內(nèi)存地址 charc='c'; printf("%s\n",c); intb=10;

printf("%s\n",b);在打印字符串的時候,實際上是打印某個地址開始的所有字符,但是當你想把整數(shù)當字符串打印的時候,這個整數(shù)被當成了字符串的地址,然后printf從這個地址開始去打印字符,直到某個位置上的值為\0。所以,如果這個整數(shù)代表的地址不存在或者不可訪問,自然也是訪問了不該訪問的內(nèi)存——segmentationfault5我們的代碼1在我們的代碼中也出現(xiàn)過這樣的段錯誤。

chartest[1];

printf(“%c”,test[1000000000]);這里是比較極端的例子,但是實際工作中經(jīng)常會出現(xiàn),是個明顯的數(shù)組越界的問題,這個地址可能是根本就不存在的char**ppstr=NULL;printf(“*ppstr==%s\n”,(*ppstr));memcpy(*ppstr,“test”,4);memset(…7我們的代碼2錯在pathName

=

strcat(“/proc”,fileName);這行

“/proc”,是靜態(tài)字符串,字符串常量,他的存儲空間在編譯期間已經(jīng)分配,大小是固定的,不能對字符串常量進行賦值。

你使用strcat,將fileName向"/proc"后面添加,當然會出錯,

仔細閱讀一下strcat的用法DESCRIPTIONThestrcat()functionappendsthesrcstringtothedeststring,overwritingthenullbyte('\0')attheendofdest,andthenaddsaterminatingnullbyte.Thestringsmaynotoverlap,andthedeststringmusthaveenoughspacefortheresult.8我們的代碼3把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的‘\0’)。src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。使用printf輸出信息這個是看似最簡單但往往很多情況下十分有效的調(diào)試方式,可以說是程序員用的最多的調(diào)試方式。為了方便使用這種方法,可以使用條件編譯指令#ifdefDEBUG和#endif把printf函數(shù)包起來(#if0和#endif)。9段錯誤的調(diào)試方法使用gcc和gdb在編譯階段加上-g參數(shù)gcc-gmain.c-omain使用gdb命令調(diào)試程序10段錯誤的調(diào)試方法11使用gdb命令調(diào)試程序12進入gdb后,運行程序1、在使用指針時,定義了指針后記得初始化指針,在使用的時候記得判斷是否為NULL。2、在使用數(shù)組時,注意數(shù)組是否被初始化,數(shù)組下標

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論