Author:gnuhpc
WebSite:blog.csdn.net/gnuhpc
1.調試技術的幾個准則
2.Linux下代碼調試工具
主要使用的GDB,以及基於GDB的圖形化工具,如DDD或eclipse,選擇上看個人習慣了。
命令行式的GDB啟動較快,可以在ssh終端下使用,操作簡潔,並且在調試GUI程序時不會崩潰,但較之圖形化則在單步調試或設置斷點時非常不方便。
當然你可以使用Vim等編輯器的插件或者補丁(clewn or vimGDB)來彌補這一缺憾,並且在GDB6.1以上的版本你可以使用GDB -tui這個模式(或者在GDB的命令行模式下按CTRL-x-a)打開一個類似於圖形界面的文本界面模式,在這個界面中你可以使用上下鍵查看源代碼(CTRL-P 和 CTRL-N完成輸入過的命令的查看).
或者你還可以使用cGDB這個工具(很慶幸這個項目在停止了三年後又有人開始維護了),這個工具是將GDB用curses包裝了一下,提供了一些很好用的feature(Esc和i鍵在代碼和命令框間切換;在代碼框中支持vim型的操作;在命令框中支持tab鍵補全命令;在移動到想加入斷點的行(行號為高亮白色)直接用空格鍵,設定好後行號會變紅;)。另外,在調試C-S程序時推薦使用eclipse。
在本文中,重點介紹ddd的操作,因為這個工具即結合了GDB命令行和圖形界面的操作。其余請參閱各個工具的手冊。
3.GDB命令行最基本操作
實例:插入排序算法調試
用偽代碼描述這個過程如下:
擬調試代碼如下:
//// insertion sort,//// usage: insert_sort num1 num2 num3 ..., where the numi are the numbers to// be sortedint x[10], // input arrayy[10], // workspace arraynum_inputs, // length of input arraynum_y = 0; // current number of elements in yvoid get_args(int ac, char **av){ int i;num_inputs = ac - 1;for (i = 0; i < num_inputs; i++)x[i] = atoi(av[i+1]);}void scoot_over(int jj){ int k;for (k = num_y-1; k > jj; k++)y[k] = y[k-1];}