一:符號表說明
使用gdb除錯的前提是要有符號表。如果程式是release版本,符號表不全,則使用gdb除錯時,不能單步除錯,成員變數等資訊不可查
如何生成符號表
編譯**時加上-g引數,則編譯的程式中會帶有當前程式的符號表。
如 gcc -o main main.c,則可對main程式進行單步除錯
二:除錯
假設有一程序test
gdb test //除錯某一可執行程式
1.設定斷點
設定斷點的命令為b
1)b function 將函式function設定為斷點
2)b test.c:100 將檔案的第100行設定為斷點
3)b test.c:100 if tt = 1 將檔案test.c的第100行作為斷點,當tt等於1時停止
2,檢視當前斷點資訊 info b
3,刪除當前斷點資訊 delete 1 delete加斷點的num 或者用d 1
4,使當前斷點失效 disable 1 如果斷點已失效 用enable 1時斷點1繼續生效
5,清除所有斷點 clear
四:列印變數的值
1,print i 簡寫為p列印變數i的值
2,p/x i 以十六進製制列印變數i的值 八進位制(o),二進位制(t)
五:除錯基本命令
1,bt 檢視當前棧空間資訊
2,next 簡寫為n 進行單步除錯
3,step 簡寫為s 遇到函式時進入函式
4,finish 結束當前函式
5,continue 簡寫為c,遇到斷點繼續執行用c ;c 3,忽略斷點,直到第三次碰到斷點
6,untill 簡寫為u,迴圈體直接退出
7,set i = 1 當前斷點處設定變數i的值為1
8,info locals 顯示當前所有區域性變數
六:稍微高階點的用法
1,command
在斷點處做處理,如下圖,當i=5時,attach.c的第16行停住,執行的命令時列印i的值
command後面加數字代表的是對某個斷點做command
2, frame 2 跳到2號棧框
3,@ 陣列列印用@,假設需要列印10個字元,變數為tt,則p@10
4,call 執行某個函式時用
6,set follow-fork-mode child/parent 當fork子程序需要跟子程序時用,或跟進父程序使用
7,gdb attach xx 跟進正在執行pid為***的程式
8,jump gdb可以改變程式的執行順序
jump test.c:10 直接跳轉到test.c的第10行執行,跳過中間**
jump +10 直接跳轉到當前斷點後的第10行,跳過中間**
9,return 強制返回,剩餘**不再還行
10, up 上移棧針,使上乙個函式成為當前函式
七:多執行緒除錯
info thread 檢視所有執行緒資訊
thread x 將程式跳到執行緒x的棧框
break thread_test.c:123 thread all 在所有執行緒中相應的行上設定斷點
set scheduler-locking off|on 鎖定當前執行緒,只除錯當前執行緒
八:其他
list function 顯示某個函式的原始碼
list 顯示當前行後面的源程式
list - 顯示當前行前面的源程式
show listsize 檢視當前listsize的設定。
set listsize count 設定一次顯示源**的行數
git使用方法和常用命令
本文適合對git已經稍有了解的人,我也是接觸這個東西沒幾天,不明覺厲啊,各種強大,我也說不出什麼道道來,但是基本上使用沒什麼問題。下面就把git的一些基本使用流程和常用命令寫下來,供大家速查。git使用流程及常用命令 1 進入shell,建立乙個資料夾作為本地git庫的根目錄 2 建立本地git版本...
gdb常用命令
gnu的偵錯程式稱為gdb,是乙個互動式的程式,工作在字元模式。其常用命令如下 break num 在指定的行上設定斷點 break 1 bt 顯示函式的呼叫順序 clear 刪除斷點 clear test.c 10 display expr 每次程式停止後顯示表示式的值 printf expr顯示...
GDB常用命令
1 執行 run2 單步執行 step next finish 一直執行到函式返回 until 執行到某一行 3 斷點 break args break 12 break 10 hbreak args 硬體輔助斷點 thbreak args rbreak args info breakpoints ...