gdb 調(diào)試,gdb調(diào)試信息-24 02:0260次瀏覽
1 簡介
GDB(GNU )是GCC的調(diào)試工具。其功能強大,現(xiàn)描述如下:
GDB主要幫忙你完成下面四個方面的功能:
1.啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
2.可讓被調(diào)試的程序在你所指定的調(diào)置的斷點處停住。(斷點可以是條件表達式)
3.當程序被停住時,可以檢查此時你的程序中所發(fā)生的事。
4.動態(tài)的改變你程序的執(zhí)行環(huán)境。
2 生成調(diào)試信息
一般來說GDB主要調(diào)試的是C/C++的程序。要調(diào)試C/C++的程序,首先在編譯時,我們必須要把調(diào)試信息加到可執(zhí)行文件中。使用編譯器(cc/gcc/g++)的 -g 參數(shù)可以做到這一點。如:
gcc -g hello.c -o hello
g++ -g hello.cpp -o hello
如果沒有-g,你將看不見程序的函數(shù)名、變量名,所代替的全是運行時的內(nèi)存地址。tmddx用-g把調(diào)試信息加入之后,并成功編譯目標代碼以后,讓我們來看看如何用gdb來調(diào)試他。
3 啟動GDB的方法
gdb
也就是你的執(zhí)行文件,一般在當前目錄下。
4 程序運行上下文
4.1 程序運行參數(shù)
set args 可指定運行時參數(shù)。(如:set args 10 20 30 40 50 )
show args 命令可以查看設(shè)置好的運行參數(shù)。
run 啟動程序
4.2 工作目錄
cd 相當于shell的cd命令。
pwd 顯示當前的所在目錄。
5 設(shè)置斷點
5.1 簡單斷點
break 設(shè)置斷點,可以簡寫為b
b 10 設(shè)置斷點,在源程序第10行
b func 設(shè)置斷點,在func函數(shù)入口處
5.2 多文件設(shè)置斷點
在進入指定函數(shù)時停住:
C++中可以使用class::或(type,type)格式來指定函數(shù)名。如果有名稱空間,可以使用::class::或者(type,type)格式來指定函數(shù)名。
break : --在源文件的行處停住
break : --在源文件的函數(shù)的入口處停住
break class::或(type,type) --在類class的函數(shù)的入口處停住
break ::class:: --在名稱空間為的類class的函數(shù)的入口處停住
5.3 查詢所有斷點
info b
6條件斷點
一般來說,為斷點設(shè)置一個條件,我們使用if關(guān)鍵詞,后面跟其斷點條件。
設(shè)置一個條件斷點
b test.c:8 if = 5
7 維護停止點
[range...] 刪除指定的斷點,如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的范圍(如:3-7)。其簡寫命令為d。
比刪除更好的一種方法是停止點,了的停止點eclipse如何查看源程序量,GDB不會刪除,tmddx還需要時,即可,就好像回收站一樣。
[range...]
所指定的停止點,如果什么都不指定,表示所有的停止點。簡寫命令是dis.
[range...]
所指定的停止點eclipse如何查看源程序量,如果什么都不指定,表示所有的停止點。簡寫命令是ena.
8 調(diào)試代碼
run 運行程序,可簡寫為r
next 單步跟蹤,函數(shù)調(diào)用當作一條簡單語句執(zhí)行,可簡寫為n
step 單步跟蹤,函數(shù)調(diào)進入被調(diào)用函數(shù)體內(nèi),可簡寫為s
退出進入的函數(shù)
until 在一個循環(huán)體內(nèi)單步跟蹤時,這個命令可以運行程序直到退出循環(huán)體,可簡寫為u。
繼續(xù)運行程序,可簡寫為c
9 查看運行時數(shù)據(jù)
print 打印變量、字符串、表達式等的值,可簡寫為p
p count 打印count的值
10 自動顯示
你可以設(shè)置一些自動顯示的變量,當程序停住時,或是在你單步跟蹤時,這些變量會自動顯示。相關(guān)的GDB命令是。
變量名
info --查看設(shè)置的自動顯示的信息。
num(info 時顯示的編號)
dnums… --刪除自動顯示,dnums意為所設(shè)置好了的自動顯式的編號。如果要同時刪除幾個,編號可以用空格分隔,如果要刪除一個范圍內(nèi)的編號,可以用減號表示(如:2-5)
dnums…
dnums…
和不刪除自動顯示的設(shè)置,而只是讓其失效和恢復。
11. 查看修改變量的值
(gdb) ptype width -- 查看變量width的類型
type =
(gdb) p width -- 打印變量width 的值
$4 = 13
你可以使用set var命令來告訴GDB,width不是你GDB的參數(shù),而是程序的變量名,如:
(gdb) set var width=47
在你改變程序變量取值時,最好都使用set var格式的GDB命令。
12 顯示源代碼
GDB 可以打印出所調(diào)試程序的源代碼,當然,在程序編譯時一定要加上 –g 的參數(shù),把源程序信息編譯到執(zhí)行文件中。不然就看不到源程序了。當程序停下來以后,
GDB會報告程序停在了那個文件的第幾行上。你可以用list命令來打印程序的源代碼。默認打印10行,還是來看一看查看源代碼的GDB命令吧。
list
Print lines line in the file.
list
顯示函數(shù)名為的函數(shù)的源程序。
list
顯示當前行后面的源程序。
list -
顯示當前行前面的源程序。
一般是打印當前行的上5行和下5行,如果顯示函數(shù)是是上2行下8行,默認是10行,當然,你也可以定制顯示的范圍,使用下面命令可以設(shè)置一次顯示源程序的行數(shù)。
set count
設(shè)置一次顯示源代碼的行數(shù)。( the list some other )
show
查看當前的設(shè)置。
清空字段內(nèi)容批量刪除,默認數(shù)據(jù)庫批量刪除安裝和配置環(huán)境教程必須在c盤嗎,安裝與配置