- gdb是linux操作系統(tǒng)特有的調(diào)試工具某筐,可以完成一般IDE提供的所有調(diào)試功能比搭。使用gdb調(diào)試程序之前,必須使用gcc的-g選項編譯程序南誊,使生成的可執(zhí)行文件中附帶有源代碼文件的信息身诺。
- 編寫例程如下,隨后使用gdb調(diào)試該程序
#include<stdio.h> int add_range(int min, int max){ int sum ; for(int i = min; i < max + 1 ; i++){ sum = sum + i; } return sum; } int main(){ int range[5]; range[0] = add_range(1, 10); range[1] = add_range(1, 100); printf("range[0]=%d\n", range[0]); printf("range[1]=%d\n", range[1]); return 0; }
gdb exec_name進入調(diào)試界面弟疆,使用help查看當前可用的命令種類
使用l(list)查看源代碼戚长,一次10行,當我們在gdb中直接回車怠苔,默認執(zhí)行上次命令
使用start命令開始執(zhí)行程序同廉,程序停留在main函數(shù)第一行
n(next)可以單步執(zhí)行程序,s(step)命令可以跳入函數(shù)中查看函數(shù)執(zhí)行的細節(jié)
使用bt(backtrace)命令查看程序棧幀柑司,可以在不同棧幀中切換來查看不同環(huán)境的變量值迫肖。使用i(info)查看變量值
切換至main堆棧,查看main函數(shù)中本地變量的值
p(print)打印某變量的值
display可以現(xiàn)實每步程序運行之后某變量的值
如果不再需要display的結果攒驰,可以使用undisplay取消顯示
finish使當前函數(shù)運行至return返回
在程序中蟆湖,如果發(fā)現(xiàn)某變量賦值不當,可以直接在調(diào)試中更改該變量的值玻粪,查看程序運行結果set var name=value
初步調(diào)試指令如下
backtrace\finish\frame\info\list\next\print\set var\start\step - 斷點
編寫例程如下#include<stdio.h> #include<string.h> int main(){ char num[10]; int sum = 0; while(1){ scanf("%s", num); long sum = 0; if(strcmp(num, "q") == 0){ break; } for( int i = 0; i< strlen(num); i++ ){ sum = sum*10 + num[i] - '0'; } printf("sum=%d\n", sum); } return 0; }
使用gdb調(diào)試程序隅津,break命令在某行設置一個斷點
break后不僅可以跟行號,還可以跟函數(shù)名稱劲室,使用continue命令繼續(xù)執(zhí)行程序伦仍,遇到斷點自動停止。使用disable breakpoints num可以暫時禁用某個斷點
可以使用delete breakpoints num刪除斷點很洋,使用break(b)查看當前斷點分布
斷點調(diào)試常用指令
break n\break function_name\break ... if ...\continue\ delete breakpoints num\disable breakpoints num\enable num\run\ -
觀察點
觀察點可以讓我們監(jiān)視某個內(nèi)存單元充蓝,當單元的內(nèi)容改變時,提示我們它發(fā)生了那些變化喉磁,常用在程序某個變量發(fā)生改變谓苟,但我們又不知道它何時發(fā)生了改變的情況
使用watch設置觀察點,查看某個變量的變化情況
使用info watchpoints查看當前觀察點
x命令用來打印內(nèi)存空間的值协怒,b表示按字節(jié)涝焙,5表示打印5組
-
使用gdb的backtrace指令可以讓我們?nèi)菀装l(fā)現(xiàn)段錯誤由何引起
一钢坦、調(diào)試-使用gdb調(diào)試linuxC程序
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門艺普,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鉴竭,你說我怎么就攤上這事歧譬。” “怎么了搏存?”我有些...
- 文/不壞的土叔 我叫張陵瑰步,是天一觀的道長。 經(jīng)常有香客問我璧眠,道長缩焦,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任责静,我火速辦了婚禮袁滥,結果婚禮上,老公的妹妹穿的比我還像新娘灾螃。我一直安慰自己题翻,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布腰鬼。 她就那樣靜靜地躺著嵌赠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熄赡。 梳的紋絲不亂的頭發(fā)上猾普,一...
- 文/蒼蘭香墨 我猛地睜開眼他托,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仆葡?” 一聲冷哼從身側響起赏参,我...
- 正文 年R本政府宣布,位于F島的核電站雇卷,受9級特大地震影響鬓椭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聋庵,卻給世界環(huán)境...
- 文/蒙蒙 一膘融、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祭玉,春花似錦氧映、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至振峻,卻和暖如春臼疫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扣孟。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 程序調(diào)試的基本思想是“分析現(xiàn)象->假設錯誤原因->產(chǎn)生新的現(xiàn)象去驗證假設”這樣一個循環(huán)過程,根據(jù)現(xiàn)象如何假設錯誤原...
- 調(diào)試前準備 獲取進程的內(nèi)核轉儲(core dump) why:最大好處是慢逾,其保存了問題發(fā)生時的狀態(tài)立倍。記錄進程當前狀...