Linux gdb调试器
生活随笔
收集整理的這篇文章主要介紹了
Linux gdb调试器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
gdb的啟動
--gdb 程序名 [corefile]
--corefile是可選的,但能增強(qiáng)gdb的調(diào)試能力
--強(qiáng)調(diào):啟動gdb必須在編譯命里加上"-g"參數(shù),"-g"一般寫在遍歷命令的靠前位置,例如--gcc -Wall -g -o hello.o -c hello.c
?
"-q"命令 --命令格式:gdb -q 執(zhí)行程序 --不顯示gdb版本信息?
gdb命令集合 --直接運(yùn)行調(diào)試命令 gdb 程序名 --"run"開始調(diào)試程序 --"where"顯示導(dǎo)致段錯誤的執(zhí)行函數(shù)樹 --"list[m,n]"m,n是要顯示包含錯誤首次出現(xiàn)位置的起始行和結(jié)尾行。不帶參數(shù)的list命令將顯示附近的10行代碼 --"print"print 變量,表達(dá)式print 'filename'::變量或表達(dá)式 --''是必須的,以便讓gdb知道指的是一個文件名。 print funcname::變量或表達(dá)式 --"whatis"告訴你變量的類型 --"ptype"告訴你結(jié)構(gòu)的定義 --"break"設(shè)置斷點(diǎn)break linenum(行號)break funcname(函數(shù)名)break filename:linenumbreak filename:funcname --"continue"從斷點(diǎn)以后繼續(xù)執(zhí)行,并非單步 --"delete"刪除一個端點(diǎn)語法格式:delete 斷點(diǎn)編號斷點(diǎn)編號是由"info break"獲取的 --"info break"查看已設(shè)置斷點(diǎn)的信息 --"set variable"命令格式是:set variable varname=valuevarname是變量名稱,value是變量的新值?
gdb單步調(diào)試 --"step"當(dāng)遇到一個函數(shù)的時候,step將進(jìn)入函數(shù),每次執(zhí)行一條語句,相當(dāng)于vs中的F10命令 --"next"當(dāng)遇到一個函數(shù)的時候,next將執(zhí)行整個函數(shù),相當(dāng)于vs中的F5命令 --"return "相當(dāng)于在函數(shù)中直接return ,并且將value作為返回值返回給調(diào)用者。 --如果需要重復(fù)執(zhí)行一條命令,不需要每次都鍵入命令,gdb記住了最后一個被執(zhí)行的命令,只要簡單的按 enter鍵就可以重復(fù)執(zhí)行最后的命令?
gdb調(diào)試帶參數(shù)的程序 進(jìn)入gdb調(diào)試界面 輸入?yún)?shù)命令set args 后面加上程序所要用的參數(shù),注意,不再帶有程序名,直接加參數(shù),如: set args a.txt b.txt 回車后輸入 run?
gdb多文件調(diào)試 如果調(diào)試的文件不在當(dāng)前目錄下,需要將文件目錄加載到程序中,如果在當(dāng)前目錄下不需要加載目錄 --命令行 "DIR ../common" 在文件中添加斷點(diǎn) --命令行 "bread helper.c:68" 在helper.c文件的第68行加斷點(diǎn) 跳出循環(huán): until LineNum 執(zhí)行到一個比當(dāng)前行號大的行,或者也可以指定在當(dāng)前frame中的某一行跳出函數(shù): finish 執(zhí)行,直到選定的frame執(zhí)行結(jié)束,然后打印返回值,將其放入歷史值中,停止 gdb多線程調(diào)試 在多線程編程中,經(jīng)常會遇到死鎖問題,這時候需要使用pstack命令來查看線程在哪個函數(shù)中鎖住了?
轉(zhuǎn)載于:https://www.cnblogs.com/zhanggaofeng/p/5775591.html
總結(jié)
以上是生活随笔為你收集整理的Linux gdb调试器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用MOS管防止电源反接的原理
- 下一篇: 3-4:类与对象中篇——默认成员函数之拷