亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

gdb調試的問題

gdb調試不懂啊,能在講一下嘛

正在回答

2 回答

一段程序執行太快了,若想知道該程序在執行過程的每一步執行后對結果的影響或者了解該語句的作用,則需要一種調試工具,讓他動作變慢,并且隨著你的控制讓他一步一步的執行,而且其間你可以用一些命令查看內存,驗證結果,這就是gdb調試工具的作用。以下是我的筆記:

GDB可以對程序進行斷點調試,單步調試,

如果用gdb調試,需要對程序重新編譯,格式為:

gcc –g main.c –o main.out

這樣生成的main.out才能用gdb調試。

需要注意的是,在調試的時候不能刪除原代碼文件,即main.c ,如果將main.c刪除了,gdb依然不支持斷點、單步調試。

用gdb調試程序格式:gdb ./main.out? 或gdb main.out

list 或者 l? 列出當前調試程序的部分(前10行)源代碼。

再按一次回車(默認執行上一次命令),繼續列出下面的源代碼

單步調試命令:start

執行后顯示:默認斷點1在main()處,具體行數為本文件的第13行

第13行的指令為:int a=5;

查看內存中變量的值,print a??? 簡寫 p a 回車

顯示a的值

因為int a=5;指令還沒有執行完畢,所以a為編譯器給的默認值。

n 回車? 下一條指令? n----next

s 回車? 執行一行源代碼并進入函數內部??? s----step

當前被調用函數將實參賦于形參,并定位到第5行

bt 回車? 查看函數堆棧

編號0?? change 函數?? 定位到第6行

編號1?? main函數??? 定位到第15行

編號0在最上層,所以當前在change 函數中

f 編號?? 可以定位到哪一層函數f(frame)切換調用的上下文,進入相應的棧里,使用該命令可以打印棧層編號,當前的函數名,函數參數值,函數所在的文件及行號,函數執行到的語句等等;

? 例:f 1

?

進入到編號1的函數中,即main函數? 并定位到15行的那條語句

q?? 退出調試

3-2使用gdb調試案例

&取地址符

0x 十六進制符號

a=0xbffff064? 給形參a賦的值是0xbffff064的內存地址

b=0xbffff068? 給形參b賦的值是0xbffff068的內存地址

int temp=*a;//將內存地址a中的存儲的數據賦值給整型變量temp,即temp=5.

int temp =a;//將內存地址a賦值給整型變量temp,即temp=0x bffff064

跟著老師的視頻做,一步一步的,就會理解該工具命令的含義了。

6 回復 有任何疑惑可以回復我~

你可以把這段視頻多看幾遍

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

gdb調試的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號