??? 在linux下進(jìn)行C程序時(shí),難免會(huì)出現(xiàn)這里那里的錯(cuò)誤,對(duì)于像段錯(cuò)誤的調(diào)試,對(duì)于生手可能比較麻煩,無從下手,我想這是一個(gè)C程序員的必經(jīng)的經(jīng)歷。一旦出現(xiàn)這樣的錯(cuò)誤是相當(dāng)棘手的。相信調(diào)試過幾次樣的錯(cuò)誤后再次遇到就能很輕松的解決了。
??? 段錯(cuò)誤的產(chǎn)生主要是由于內(nèi)存操作有誤,如訪問的數(shù)組越界,向空地址賦值,取值等。調(diào)試段錯(cuò)誤是要借助gdb調(diào)試工具。對(duì)于那些立即出現(xiàn)的錯(cuò)誤很好調(diào)試,如果是很時(shí)間才出現(xiàn)的錯(cuò)誤,就可以通過生成core文件。通過調(diào)試core文件定位錯(cuò)誤產(chǎn)生的地方,而有些錯(cuò)誤并非是一眼能看出來。像在多線程情況下,在沒有保護(hù)的情況下操作數(shù)據(jù)庫時(shí)也會(huì)產(chǎn)生段錯(cuò)誤。一個(gè)不可重入函數(shù)在單線程下運(yùn)行沒有問題。可能到多線程情況下就會(huì)出現(xiàn)越界的情況。因而意識(shí)到多線程下的并發(fā)機(jī)制。
??? 對(duì)于死循環(huán)的調(diào)試,也可以借助gdb,當(dāng)程序出現(xiàn)死循環(huán)時(shí),將gdb attach到程序上,如果 是主進(jìn)程序出現(xiàn)死循環(huán),可以通過設(shè)斷點(diǎn)方法跟蹤,而對(duì)于多線程程序可以通過查看哪個(gè)線程在運(yùn)行,基本上能定位錯(cuò)誤出現(xiàn)的地方。
??? 段錯(cuò)誤的產(chǎn)生主要是由于內(nèi)存操作有誤,如訪問的數(shù)組越界,向空地址賦值,取值等。調(diào)試段錯(cuò)誤是要借助gdb調(diào)試工具。對(duì)于那些立即出現(xiàn)的錯(cuò)誤很好調(diào)試,如果是很時(shí)間才出現(xiàn)的錯(cuò)誤,就可以通過生成core文件。通過調(diào)試core文件定位錯(cuò)誤產(chǎn)生的地方,而有些錯(cuò)誤并非是一眼能看出來。像在多線程情況下,在沒有保護(hù)的情況下操作數(shù)據(jù)庫時(shí)也會(huì)產(chǎn)生段錯(cuò)誤。一個(gè)不可重入函數(shù)在單線程下運(yùn)行沒有問題。可能到多線程情況下就會(huì)出現(xiàn)越界的情況。因而意識(shí)到多線程下的并發(fā)機(jī)制。
??? 對(duì)于死循環(huán)的調(diào)試,也可以借助gdb,當(dāng)程序出現(xiàn)死循環(huán)時(shí),將gdb attach到程序上,如果 是主進(jìn)程序出現(xiàn)死循環(huán),可以通過設(shè)斷點(diǎn)方法跟蹤,而對(duì)于多線程程序可以通過查看哪個(gè)線程在運(yùn)行,基本上能定位錯(cuò)誤出現(xiàn)的地方。