gdb命令手册
GDB 的命令很多,本文不會全部介紹,僅會介紹一些最常用的。在介紹之前,先介紹GDB中的一個非常有用的功能:補齊功能。它就如同Linux下SHELL中的命令補齊一樣。當(dāng)你輸入一個命令的前幾個字符,然后輸入TAB鍵,如果沒有其它命令的前幾個字符與此相同,SHELL將補齊此命令。如果有其它命令的前幾個字符與此相同,你會聽到一聲警告聲,再輸入TAB鍵,SHELL將所有前幾個字符與此相同的命令全部列出。而GDB中的補齊功能不僅能補齊GDB命令,而且能補齊參數(shù)。
本文將先介紹常用的命令,然后結(jié)合一個具體的例子來演示如何實際使用這些命令。下面的所有命令除了第一條啟動GDB命令是在SHELL下輸入的,其余都是GDB內(nèi)的命令。大部分GDB內(nèi)的命令都可以僅輸入前幾個字符,只要不與其它指令沖突。如quit可以簡寫為q,因為以q打頭的命令只有quit。 List可以簡寫為l,等等。
1.啟動GDB
你可以輸入GDB來啟動GDB程序。GDB 程序有許多參數(shù),在此沒有必要詳細介紹,但一個最為常用的還是要介紹的:如果你已經(jīng)編譯好一個程序,我們假設(shè)文件名為hello,你想用GDB調(diào)試它,可以輸入gdb hello來啟動GDB并載入你的程序。如果你僅僅啟動了GDB,你必須在啟動后,在GDB中再載入你的程序。
2.載入程序 === file
在GDB內(nèi),載入程序很簡單,使用file命令。如file hello。當(dāng)然,程序的路徑名要正確。
退出GDB === quit
在GDB的命令方式下,輸入quit,你就可以退出GDB。你也可以輸入'C-d'來退出GDB。
3.運行程序 === run
當(dāng)你在GDB中已將要調(diào)試的程序載入后,你可以用run命令來執(zhí)行。如果你的程序需要參數(shù),你可以在run指令后接著輸入?yún)?shù),就象你在SHELL下執(zhí)行一個需要參數(shù)的命令一樣。
4.查看程序信息 === info
info指令用來查看程序的信息,當(dāng)你用help info查看幫助的話,info指令的參數(shù)足足占了兩個屏幕,它的參數(shù)非常多,但大部分不常用。我用info指令最多的是用它來查看斷點信息。
4.1 查看斷點信息
info br
br是斷點break的縮寫,記得GDB的補齊功能吧。用這條指令,你可以得到你所設(shè)置的所有斷點的詳細信息。包括斷點號,類型,狀態(tài),內(nèi)存地址,斷點在源程序中的位置等。
4.2 查看當(dāng)前源程序
info source
4.3 查看堆棧信息
info stack
用這條指令你可以看清楚程序的調(diào)用層次關(guān)系。
4.4 查看當(dāng)前的參數(shù)
info args
4.5 傳遞參數(shù)
run [arglist]? 或者? set args [arglist]
5.列出源一段源程序 === list
5.1 列出某個函數(shù)
list FUNCTION
6. 給變量賦值? === set
6.1 set variable 變量=值
7. 使中斷失效或有效 === disable /? enable
7.1 disable 斷點編號?? 可以使某個斷點失效? 如diable main 可使break main 命令失效
7.2 enable 斷點編號??? 可以使某個斷點恢復(fù)有效????? ?
8. 刪除斷點? ===clean / delete
disable只是讓某個斷點暫時失效,斷點依然存在于程序中.如果要徹底刪除某個斷點,可以使用clear
或delete命令.
8.1 clear: 刪除程序中所有的斷點.
8.2 clear 行號: 刪除此行的斷點.
8.3 clear 函數(shù)名: 刪除該函數(shù)的斷點.
8.4 delete 斷點編號: 刪除指定編號的斷點.如果一次要刪除多個斷點,各個斷點編號以空格隔開
本文將先介紹常用的命令,然后結(jié)合一個具體的例子來演示如何實際使用這些命令。下面的所有命令除了第一條啟動GDB命令是在SHELL下輸入的,其余都是GDB內(nèi)的命令。大部分GDB內(nèi)的命令都可以僅輸入前幾個字符,只要不與其它指令沖突。如quit可以簡寫為q,因為以q打頭的命令只有quit。 List可以簡寫為l,等等。
1.啟動GDB
你可以輸入GDB來啟動GDB程序。GDB 程序有許多參數(shù),在此沒有必要詳細介紹,但一個最為常用的還是要介紹的:如果你已經(jīng)編譯好一個程序,我們假設(shè)文件名為hello,你想用GDB調(diào)試它,可以輸入gdb hello來啟動GDB并載入你的程序。如果你僅僅啟動了GDB,你必須在啟動后,在GDB中再載入你的程序。
2.載入程序 === file
在GDB內(nèi),載入程序很簡單,使用file命令。如file hello。當(dāng)然,程序的路徑名要正確。
退出GDB === quit
在GDB的命令方式下,輸入quit,你就可以退出GDB。你也可以輸入'C-d'來退出GDB。
3.運行程序 === run
當(dāng)你在GDB中已將要調(diào)試的程序載入后,你可以用run命令來執(zhí)行。如果你的程序需要參數(shù),你可以在run指令后接著輸入?yún)?shù),就象你在SHELL下執(zhí)行一個需要參數(shù)的命令一樣。
4.查看程序信息 === info
info指令用來查看程序的信息,當(dāng)你用help info查看幫助的話,info指令的參數(shù)足足占了兩個屏幕,它的參數(shù)非常多,但大部分不常用。我用info指令最多的是用它來查看斷點信息。
4.1 查看斷點信息
info br
br是斷點break的縮寫,記得GDB的補齊功能吧。用這條指令,你可以得到你所設(shè)置的所有斷點的詳細信息。包括斷點號,類型,狀態(tài),內(nèi)存地址,斷點在源程序中的位置等。
4.2 查看當(dāng)前源程序
info source
4.3 查看堆棧信息
info stack
用這條指令你可以看清楚程序的調(diào)用層次關(guān)系。
4.4 查看當(dāng)前的參數(shù)
info args
4.5 傳遞參數(shù)
run [arglist]? 或者? set args [arglist]
5.列出源一段源程序 === list
5.1 列出某個函數(shù)
list FUNCTION
6. 給變量賦值? === set
6.1 set variable 變量=值
7. 使中斷失效或有效 === disable /? enable
7.1 disable 斷點編號?? 可以使某個斷點失效? 如diable main 可使break main 命令失效
7.2 enable 斷點編號??? 可以使某個斷點恢復(fù)有效????? ?
8. 刪除斷點? ===clean / delete
disable只是讓某個斷點暫時失效,斷點依然存在于程序中.如果要徹底刪除某個斷點,可以使用clear
或delete命令.
8.1 clear: 刪除程序中所有的斷點.
8.2 clear 行號: 刪除此行的斷點.
8.3 clear 函數(shù)名: 刪除該函數(shù)的斷點.
8.4 delete 斷點編號: 刪除指定編號的斷點.如果一次要刪除多個斷點,各個斷點編號以空格隔開
總結(jié)
- 上一篇: 一次微信小程序的快速开发体验
- 下一篇: C语言数学函数库