課程
/后端開發(fā)
/C
/Linux C語言指針與內(nèi)存
gdb調(diào)試不懂啊,能在講一下嘛
2016-04-11
源自:Linux C語言指針與內(nèi)存 4-1
正在回答
一段程序執(zhí)行太快了,若想知道該程序在執(zhí)行過程的每一步執(zhí)行后對結(jié)果的影響或者了解該語句的作用,則需要一種調(diào)試工具,讓他動作變慢,并且隨著你的控制讓他一步一步的執(zhí)行,而且其間你可以用一些命令查看內(nèi)存,驗證結(jié)果,這就是gdb調(diào)試工具的作用。以下是我的筆記:
GDB可以對程序進行斷點調(diào)試,單步調(diào)試,
如果用gdb調(diào)試,需要對程序重新編譯,格式為:
gcc –g main.c –o main.out
這樣生成的main.out才能用gdb調(diào)試。
需要注意的是,在調(diào)試的時候不能刪除原代碼文件,即main.c ,如果將main.c刪除了,gdb依然不支持斷點、單步調(diào)試。
用gdb調(diào)試程序格式:gdb ./main.out? 或gdb main.out
list 或者 l? 列出當前調(diào)試程序的部分(前10行)源代碼。
再按一次回車(默認執(zhí)行上一次命令),繼續(xù)列出下面的源代碼
單步調(diào)試命令:start
執(zhí)行后顯示:默認斷點1在main()處,具體行數(shù)為本文件的第13行
第13行的指令為:int a=5;
查看內(nèi)存中變量的值,print a??? 簡寫 p a 回車
顯示a的值
因為int a=5;指令還沒有執(zhí)行完畢,所以a為編譯器給的默認值。
n 回車? 下一條指令? n----next
s 回車? 執(zhí)行一行源代碼并進入函數(shù)內(nèi)部??? s----step
當前被調(diào)用函數(shù)將實參賦于形參,并定位到第5行
bt 回車? 查看函數(shù)堆棧
編號0?? change 函數(shù)?? 定位到第6行
編號1?? main函數(shù)??? 定位到第15行
編號0在最上層,所以當前在change 函數(shù)中
f 編號?? 可以定位到哪一層函數(shù)f(frame)切換調(diào)用的上下文,進入相應的棧里,使用該命令可以打印棧層編號,當前的函數(shù)名,函數(shù)參數(shù)值,函數(shù)所在的文件及行號,函數(shù)執(zhí)行到的語句等等;
? 例:f 1
?
進入到編號1的函數(shù)中,即main函數(shù)? 并定位到15行的那條語句
q?? 退出調(diào)試
3-2使用gdb調(diào)試案例
&取地址符
0x 十六進制符號
a=0xbffff064? 給形參a賦的值是0xbffff064的內(nèi)存地址
b=0xbffff068? 給形參b賦的值是0xbffff068的內(nèi)存地址
int temp=*a;//將內(nèi)存地址a中的存儲的數(shù)據(jù)賦值給整型變量temp,即temp=5.
int temp =a;//將內(nèi)存地址a賦值給整型變量temp,即temp=0x bffff064
跟著老師的視頻做,一步一步的,就會理解該工具命令的含義了。
你可以把這段視頻多看幾遍
舉報
指針-C語言的核心,代領大家對c語言有更加深刻的理解
3 回答有關gdb調(diào)試問題
1 回答gdb 不能調(diào)試
4 回答有關GDB調(diào)試進程內(nèi)容問題
2 回答VC里面有什么像gdb一樣的調(diào)試工具啊啊
4 回答現(xiàn)在真實工作中還有人用gdb這樣的命令行調(diào)試嗎
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關注慕課網(wǎng)微信公眾號
2016-07-12
一段程序執(zhí)行太快了,若想知道該程序在執(zhí)行過程的每一步執(zhí)行后對結(jié)果的影響或者了解該語句的作用,則需要一種調(diào)試工具,讓他動作變慢,并且隨著你的控制讓他一步一步的執(zhí)行,而且其間你可以用一些命令查看內(nèi)存,驗證結(jié)果,這就是gdb調(diào)試工具的作用。以下是我的筆記:
GDB可以對程序進行斷點調(diào)試,單步調(diào)試,
如果用gdb調(diào)試,需要對程序重新編譯,格式為:
gcc –g main.c –o main.out
這樣生成的main.out才能用gdb調(diào)試。
需要注意的是,在調(diào)試的時候不能刪除原代碼文件,即main.c ,如果將main.c刪除了,gdb依然不支持斷點、單步調(diào)試。
用gdb調(diào)試程序格式:gdb ./main.out? 或gdb main.out
list 或者 l? 列出當前調(diào)試程序的部分(前10行)源代碼。
再按一次回車(默認執(zhí)行上一次命令),繼續(xù)列出下面的源代碼
單步調(diào)試命令:start
執(zhí)行后顯示:默認斷點1在main()處,具體行數(shù)為本文件的第13行
第13行的指令為:int a=5;
查看內(nèi)存中變量的值,print a??? 簡寫 p a 回車
顯示a的值
因為int a=5;指令還沒有執(zhí)行完畢,所以a為編譯器給的默認值。
n 回車? 下一條指令? n----next
s 回車? 執(zhí)行一行源代碼并進入函數(shù)內(nèi)部??? s----step
當前被調(diào)用函數(shù)將實參賦于形參,并定位到第5行
bt 回車? 查看函數(shù)堆棧
編號0?? change 函數(shù)?? 定位到第6行
編號1?? main函數(shù)??? 定位到第15行
編號0在最上層,所以當前在change 函數(shù)中
f 編號?? 可以定位到哪一層函數(shù)f(frame)切換調(diào)用的上下文,進入相應的棧里,使用該命令可以打印棧層編號,當前的函數(shù)名,函數(shù)參數(shù)值,函數(shù)所在的文件及行號,函數(shù)執(zhí)行到的語句等等;
? 例:f 1
?
進入到編號1的函數(shù)中,即main函數(shù)? 并定位到15行的那條語句
q?? 退出調(diào)試
3-2使用gdb調(diào)試案例
&取地址符
0x 十六進制符號
a=0xbffff064? 給形參a賦的值是0xbffff064的內(nèi)存地址
b=0xbffff068? 給形參b賦的值是0xbffff068的內(nèi)存地址
int temp=*a;//將內(nèi)存地址a中的存儲的數(shù)據(jù)賦值給整型變量temp,即temp=5.
int temp =a;//將內(nèi)存地址a賦值給整型變量temp,即temp=0x bffff064
跟著老師的視頻做,一步一步的,就會理解該工具命令的含義了。
2016-04-13
你可以把這段視頻多看幾遍