亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用和總結GDB調(diào)試命令

2020-02-24 14:35:32
字體:
來源:轉載
供稿:網(wǎng)友

使用和總結GDB調(diào)試命令,gdb是一個在UNIX環(huán)境下的命令行調(diào)試工具。如果需要使用gdb調(diào)試程序,請在gcc時加上-g選項。下面的命令部分是簡化版,比如使用l代替list等等。

1.基本命令

1)進入GDB  #gdb test

  test是要調(diào)試的程序,由gcc test.c -g -o test生成。進入后提示符變?yōu)?gdb) 。

2)查看源碼  (gdb) l

  源碼會進行行號提示。

  如果需要查看在其他文件中定義的函數(shù),在l后加上函數(shù)名即可定位到這個函數(shù)的定義及查看附近的其他源碼?;蛘撸菏褂脭帱c或單步運行,到某個函數(shù)處使用s進入這個函數(shù)。

3)設置斷點  (gdb) b 6

  這樣會在運行到源碼第6行時停止,可以查看變量的值、堆棧情況等;這個行號是gdb的行號。

?4)查看斷點處情況  (gdb)?info b

  可以鍵入"info b"來查看斷點處情況,可以設置多個斷點;

5)運行代碼  (gdb)?r

6)顯示變量值  (gdb)?p n

  在程序暫停時,鍵入"p 變量名"(print)即可;

  GDB在顯示變量值時都會在對應值之前加上"$N"標記,它是當前變量值的引用標記,以后若想再次引用此變量,就可以直接寫作"$N",而無需寫冗長的變量名;

7)觀察變量  (gdb)?watch n

?在某一循環(huán)處,往往希望能夠觀察一個變量的變化情況,這時就可以鍵入命令"watch"來觀察變量的變化情況,GDB在"n"設置了觀察點;

8)單步運行  (gdb)?n

9)程序繼續(xù)運行  (gdb)?c

  使程序繼續(xù)往下運行,直到再次遇到斷點或程序結束;

10)退出GDB  (gdb)?q

?

2.斷點調(diào)試

命令格式  ????????????????????? 例子????????????       作用

break + 設置斷點的行號  break n      在n行處設置斷點

tbreak + 行號或函數(shù)名  tbreak n/func    設置臨時斷點,到達后被自動刪除

break + filename + 行號  break main.c:10  用于在指定文件對應行設置斷點

break +   break 0x3400a      用于在內(nèi)存某一位置處暫停?

break + 行號 + if + 條件  break 10 if i==3   用于設置條件斷點,在循環(huán)中使用非常方便?

info breakpoints/watchpoints [n]  info break  n表示斷點號,查看斷點/觀察點的情況?

clear + 要清除的斷點行號  clear 10    用于清除對應行的斷點,要給出斷點的行號,清除時GDB會給出提示

delete + 要清除的斷點編號  delete 3    用于清除斷點和自動顯示的表達式的命令,要給出斷點的編號,清除時GDB不會給出任何提示

disable/enable + 斷點編號  disable 3    讓所設斷點暫時失效/使能,如果要讓多個編號處的斷點失效/使能,可將編號之間用空格隔開

awatch/watch + 變量  awatch/watch i    設置一個觀察點,當變量被讀出或寫入時程序被暫停?

rwatch + 變量      rwatch i        設置一個觀察點,當變量被讀出時,程序被暫停?

catch                  設置捕捉點來補捉程序運行時的一些事件。如:載入共享庫(動態(tài)鏈接庫)或是C++的異常?

tcatch                  只設置一次捕捉點,當程序停住以后,應點被自動刪除

?

3.數(shù)據(jù)命令

display +表達式  display a  用于顯示表達式的值,每當程序運行到斷點處都會顯示表達式的值?

info display      用于顯示當前所有要顯示值的表達式的情況?

delete + display 編號  delete 3  用于刪除一個要顯示值的表達式,被刪除的表達式將不被顯示

disable/enable + display 編號  disable/enable 3  使一個要顯示值的表達式暫時失效/使能?

undisplay + display 編號  undisplay 3  用于結束某個表達式值的顯示

whatis + 變量  whatis i  顯示某個表達式的數(shù)據(jù)類型

print(p) + 變量/表達式  p n  用于打印變量或表達式的值

set + 變量 = 變量值  set i = 3  改變程序中某個變量的值

  在使用print命令時,可以對變量按指定格式進行輸出,其命令格式為print /變量名 + 格式

  其中常用的變量格式:x:十六進制;d:十進制;u:無符號數(shù);o:八進制;c:字符格式;f:浮點數(shù)。

?

4.調(diào)試運行環(huán)境相關命令

set args  set args arg1 arg2  設置運行參數(shù)

show args  show args  參看運行參數(shù)

set width + 數(shù)目  set width 70  設置GDB的行寬

cd + 工作目錄  cd ../  切換工作目錄

run  r/run  程序開始執(zhí)行

step(s)  s  進入式(會進入到所調(diào)用的子函數(shù)中)單步執(zhí)行,進入函數(shù)的前提是,此函數(shù)被編譯有debug信息

next(n)  n  非進入式(不會進入到所調(diào)用的子函數(shù)中)單步執(zhí)行

finish  finish  一直運行到函數(shù)返回并打印函數(shù)返回時的堆棧地址和返回值及參數(shù)值等信息

until + 行數(shù)  u 3  運行到函數(shù)某一行?

continue(c)  c  執(zhí)行到下一個斷點或程序結束?

return   return 5  改變程序流程,直接結束當前函數(shù),并將指定值返回

call + 函數(shù)  call func  在當前位置執(zhí)行所要運行的函數(shù)

?

5.堆棧相關命令

backtrace/bt  bt  用來打印棧幀指針,也可以在該命令后加上要打印的棧幀指針的個數(shù),查看程序執(zhí)行到此時,是經(jīng)過哪些函數(shù)呼叫的程序,程序“調(diào)用堆?!笔钱斍昂瘮?shù)之前的所有已調(diào)用函數(shù)的列表(包括當前函數(shù))。每個函數(shù)及其變量都被分配了一個“幀”,最近調(diào)用的函數(shù)在 0 號幀中(“底部”幀)

frame  frame 1  用于打印指定棧幀

info reg  info reg  查看寄存器使用情況

info stack  info stack  查看堆棧使用情況

up/down  up/down  跳到上一層/下一層函數(shù)

?

6.跳轉執(zhí)行

jump ?指定下一條語句的運行點??梢允俏募男刑枺梢允莊ile:line格式,可以是+num這種偏移量格式。表式著下一條運行語句從哪里開始。相當于改變了PC寄存器內(nèi)容,堆棧內(nèi)容并沒有改變,跨函數(shù)跳轉容易發(fā)生錯誤。

?

7.信號命令

signal   signal?SIGXXX   產(chǎn)生XXX信號,如SIGINT。一種速查Linux查詢信號的方法:# kill -l

handle?  在GDB中定義一個信號處理。信號可以以SIG開頭或不以SIG開頭,可以用定義一個要處理信號的范圍(如:SIGIO-SIGKILL,表示處理從SIGIO信號到SIGKILL的信號,其中包括SIGIO,SIGIOT,SIGKILL三個信號),也可以使用關鍵字all來標明要處理所有的信號。一旦被調(diào)試的程序接收到信號,運行程序馬上會被GDB停住,以供調(diào)試。其可以是以下幾種關鍵字的一個或多個:
  nostop/stop
    當被調(diào)試的程序收到信號時,GDB不會停住程序的運行,但會打出消息告訴你收到這種信號/GDB會停住你的程序??
  print/noprint
    當被調(diào)試的程序收到信號時,GDB會顯示出一條信息/GDB不會告訴你收到信號的信息?
  pass?
  noignore?
    當被調(diào)試的程序收到信號時,GDB不處理信號。這表示,GDB會把這個信號交給被調(diào)試程序會處理。?
  nopass?
  ignore?
    當被調(diào)試的程序收到信號時,GDB不會讓被調(diào)試程序來處理這個信號。?
  info signals?
  info handle?
    可以查看哪些信號被GDB處理,并且可以看到缺省的處理方式

  single命令和shell的kill命令不同,系統(tǒng)的kill命令發(fā)信號給被調(diào)試程序時,是由GDB截獲的,而single命令所發(fā)出一信號則是直接發(fā)給被調(diào)試程序的。

?

8.運行Shell命令

  如(gdb)shell ls來運行l(wèi)s?! ?/span>

?

9.更多程序運行選項和調(diào)試

1、程序運行參數(shù)。?
  set args 可指定運行時參數(shù)。(如:set args 10 20 30 40 50)?
  show args 命令可以查看設置好的運行參數(shù)。?
2、運行環(huán)境。?
  path?可設定程序的運行路徑。?
  show paths 查看程序的運行路徑。

  set environment varname [=value] 設置環(huán)境變量。如:set env USER=hchen?

  show environment [varname] 查看環(huán)境變量。?

3、工作目錄。

  cd   ?相當于shell的cd命令。?

  pwd  顯示當前的所在目錄。?
4、程序的輸入輸出。?
  info terminal 顯示你程序用到的終端的模式。?
  使用重定向控制程序輸出。如:run > outfile?
  tty命令可以指寫輸入輸出的終端設備。如:tty /dev/ttyb

5、調(diào)試已運行的程序

兩種方法:?
  (1)在UNIX下用ps查看正在運行的程序的PID(進程ID),然后用gdb PID格式掛接正在運行的程序。?
  (2)先用gdb 關聯(lián)上源代碼,并進行gdb,在gdb中用attach命令來掛接進程的PID。并用detach來取消掛接的進程。

6、暫停 / 恢復程序運行  當進程被gdb停住時,你可以使用info program 來查看程序的是否在運行,進程號,被暫停的原因。?在gdb中,我們可以有以下幾種暫停方式:斷點(BreakPoint)、觀察點(WatchPoint)、捕捉點(CatchPoint)、信號(Signals)、線程停止(Thread Stops),如果要恢復程序運行,可以使用c或是continue命令。

7、線程(Thread Stops)

如果程序是多線程,可以定義斷點是否在所有的線程上,或是在某個特定的線程。?
  break thread
  break thread if ...?
  linespec指定了斷點設置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,可以通過“info threads”命令來查看正在運行程序中的線程信息。如果不指定thread 則表示斷點設在所有線程上面。還可以為某線程指定斷點條件。如:?
  (gdb) break frik.c:13 thread 28 if bartab > lim?
當你的程序被GDB停住時,所有的運行線程都會被停住。這方便查看運行程序的總體情況。而在你恢復程序運行時,所有的線程也會被恢復運行。

?

10.調(diào)試core文件

Core Dump:Core的意思是內(nèi)存,Dump的意思是扔出來,堆出來。開發(fā)和使用Unix程序時,有時程序莫名其妙的down了,卻沒有任何的提示(有時候會提示core dumped),這時候可以查看一下有沒有形如core.進程號的文件生成,這個文件便是操作系統(tǒng)把程序down掉時的內(nèi)存內(nèi)容扔出來生成的, 它可以做為調(diào)試程序的參考

(1)生成Core文件

  一般默認情況下,core file的大小被設置為了0,這樣系統(tǒng)就不dump出core file了。修改后才能生成core文件。

  #設置core大小為無限
  ulimit -c unlimited
  #設置文件大小為無限
  ulimit unlimited

  這些需要有root權限, 在ubuntu下每次重新打開中斷都需要重新輸入上面的第一條命令, 來設置core大小為無限

core文件生成路徑:輸入可執(zhí)行文件運行命令的同一路徑下。若系統(tǒng)生成的core文件不帶其他任何擴展名稱,則全部命名為core。新的core文件生成將覆蓋原來的core文件。

1)/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作為擴展。文件內(nèi)容為1,表示添加pid作為擴展名,生成的core文件格式為core.xxxx;為0則表示生成的core文件同一命名為core。
可通過以下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid

2)proc/sys/kernel/core_pattern可以控制core文件保存位置和文件名格式。
可通過以下命令修改此文件:
echo "/corefile/core-%e-%p-%t" > core_pattern,可以將core文件統(tǒng)一生成到/corefile目錄下,產(chǎn)生的文件名為core-命令名-pid-時間戳
以下是參數(shù)列表:
??? %p - insert pid into filename 添加pid
??? %u - insert current uid into filename 添加當前uid
??? %g - insert current gid into filename 添加當前gid
??? %s - insert signal that caused the coredump into the filename 添加導致產(chǎn)生core的信號
??? %t - insert UNIX time that the coredump occurred into filename 添加core文件生成時的unix時間
??? %h - insert hostname where the coredump happened into filename 添加主機名
??? %e - insert coredumping executable name into filename 添加命令名

(2)用gdb查看core文件

  發(fā)生core dump之后, 用gdb進行查看core文件的內(nèi)容, 以定位文件中引發(fā)core dump的行.
  gdb [exec file] [core file]
  如:
  gdb ./test core

  或gdb ./a.out
?  core-file core.xxxx
  gdb后, 用bt命令backtrace或where查看程序運行到哪里, 來定位core dump的文件->行.

  待調(diào)試的可執(zhí)行文件,在編譯的時候需要加-g,core文件才能正常顯示出錯信息

  1)gdb -core=core.xxxx
  file ./a.out
  bt
  2)gdb -c core.xxxx
  file ./a.out
  bt

(3)用gdb實時觀察某進程crash信息

  啟動進程
  gdb -p PID
  c
  運行進程至crash
  gdb會顯示crash信息
  bt

以上就是使用和總結GDB調(diào)試命令,如果大家想了解更多相關內(nèi)容,請持續(xù)關注本站,本站小編將在第一時間為大家?guī)砀玫慕?jīng)典內(nèi)容。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

欧美午夜精品一区二区三区| 欧美a级片网站| 亚洲中无吗在线| 九色porny丨精品自拍视频| 精品国产99久久久久久| 国产欧美精品一区二区| 欧美不卡一二三| 亚洲午夜精品久久久久久浪潮| 国产免费的av| 黄色免费网站在线| 日韩中文字幕欧美| 国产精品丝袜高跟| 天天综合天天做| 日韩欧美亚洲日产国产| 久久精品视频7| 日韩福利视频一区| 日日狠狠久久偷偷四色综合免费| 欧美在线视频一区二区| 精品视频在线观看一区二区| 日韩中文欧美| 操她视频网站| 国产精品原创巨作av| 99国产精品免费网站| 欧美日本亚洲| 99久久婷婷国产综合精品首页| 一区二区三区四区五区视频| 亚洲深夜福利网站| 狼人精品一区二区三区在线| 久久中文字幕视频| 亚洲第一久久影院| 亚洲精品国产视频| 性欧美大战久久久久久久| 亚洲美女少妇无套啪啪呻吟| 少妇又色又爽又黄的视频| 91免费版网站入口| 国内老熟妇对白hdxxxx| 精品人妻无码中文字幕18禁| 黄色一区二区在线| 伊人一区二区三区| 91国语精品自产拍在线观看性色| 成人免费视频在线观看超级碰| 91免费在线视频| jizzjizz日本护士视频| 成人小视频在线观看免费| 久久不见久久见国语| 日本在线播放| jizz在亚洲| 性刺激综合网| 中文字幕4区| 六月婷婷中文字幕| 亚洲一级二级三级| 日韩在线免费视频观看| 一本久久a久久精品亚洲| 欧美91精品| 在线天堂av| 美日韩精品视频| 久久国产乱子精品免费女| 一二三四社区在线视频| 国产一二三av| 国产情人节一区| 四虎地址8848精品| 欧美性猛交xxxx黑人交| 日本在线视频www| 免费男女羞羞的视频网站主页在线观看| 九义人在线观看完整免费版电视剧| 在线观看的黄色网址| 欧美人与拘性视交免费看| 波多野结衣视频一区二区| 亚洲精品亚洲人成人网在线播放| 亚洲欧美国产精品桃花| 8v天堂国产在线一区二区| 亚洲欧美经典视频| 亚洲成人国产精品| 开心激情综合| 日本在线播放一二三区| 在线看黄的网站| 中国黄色录像片| 免费看污片网站| 91超碰在线观看| 嫩草影院网站在线| 在线观看国产福利视频| 一区二区成人网| 亚洲精品无码久久久久久久| 26uuu精品一区二区在线观看| 亚洲精品日韩久久久| 成人动漫h在线观看| 久久久久久久国产视频| 日韩一区精品字幕| 青青草精品毛片| 中国老熟女重囗味hdxx| 91精品免费观看| 深爱五月激情网| 性孕妇free特大另类| 国产精品99久久久久久动医院| 日本夜爽爽一二区| 在线观看a视频| 首页国产欧美久久| 久久久影视传媒| 欧美疯狂性受xxxxx另类| 美女诱惑一区| 日韩精品福利视频| 精品人妻一区二区色欲产成人| 国产成人av资源| 精品国产不卡一区二区三区| 亚洲欧美bt| 日本边添边摸边做边爱的第三级| 色素色在线综合| 欧美日韩黄网站| 国产精品久久成人免费观看| 亚洲精品日韩在线| 日本妇乱大交xxxxx| 欧美aaa在线观看| 日韩在线观看免费全集电视剧网站| 色综合视频在线| 成人性色av| 无码少妇一区二区三区| 肉丝袜脚交视频一区二区| 亚洲人成网在线播放| 精品久久久久久国产91| 91精品国产91久久久久游泳池| 欧美黄色视屏| 中文字幕免费在线观看| 国产xxx免费观看| 久久久久久久久久久久久久久久久久久久| 欧美综合77777色婷婷| 在线电影av| 久久久久无码精品国产sm果冻| 欧美巨胸大乳hitomi| 国产精品一区二区三区视频网站| 国产精品成人99一区无码| 精品久久久久久中文字幕2017| 91豆花视频在线播放| 欧美激情欧美| 日本三级日本三级日本三级极| 激情 小说 亚洲 图片: 伦| 老司机亚洲精品一区二区| 色777狠狠综合秋免鲁丝| 国产女大学生av| 99精品视频在线观看播放| 欧美日韩精品久久| 一区二区在线观看视频| 国产成a人亚洲精v品无码| caoporn国产精品免费视频| 日韩av最新在线| 男人的天堂色| 欧美日韩中文字幕在线| 日韩精品在线免费播放| 视频在线观看成人| 欧美三级日韩三级国产三级| 中文字幕第一页在线播放| 成人小视频在线| 一区二区三区鲁丝不卡| 国产毛片精品一区| 在线精品视频播放| 免费观看欧美大片| 不卡的国产精品| 久草在线成人| 国产一区二区久久久| 中文字幕免费高清视频| 亚洲午夜电影在线观看| 欧美成人777| 国产高清成人久久| 亚洲丝袜在线观看| 日韩三级av在线| 加勒比中文字幕精品| 国产精品久久久久9999高清| 欧美精品一卡| 日本激情一区二区| 亚洲成人tv网| 九九九九精品九九九九| 色婷婷综合久久久| 国产成人8x视频一区二区| 星空大象在线观看免费播放| 国产一区二区三区乱码| 精品人妻一区二区三区四区不卡| 激情综合激情| 免费在线一级片| 真实国产乱子伦对白在线| 51妺嘿嘿午夜福利| 久久狠狠久久| 色视频www在线播放国产| 欧美人动性xxxxz0oz| 亚洲电影av| 亚洲永久精品ww.7491进入| wwwxx免费| 成人欧美日韩| 9999国产精品| 91蝌蚪国产九色| 波多野洁衣一区| 日韩精品综合一本久道在线视频| 国产91精品久久久久久久| 日韩美女在线视频| 日本视频在线观看一区二区三区| 成人做爰高清视频网站| 日本激情综合网| 18禁男女爽爽爽午夜网站免费| 国产精品二区一区二区aⅴ污介绍| 国产精品一区二区三区在线| 捆绑紧缚一区二区三区在线观看| 欧美日本精品| 欧美日韩精品免费看| 亚洲av无码国产精品永久一区| canopen超线视频网线的应用| 久久国产视频精品| 国产女主播在线观看| 国产一区清纯| 人人狠狠综合久久亚洲婷婷| 国产一区二区三区18| 亚洲高清免费观看高清完整版| 国产精品久久久久久久久久新婚| 日韩视频一区二区三区四区| 中文字字幕在线中文乱码| 亚洲精品亚洲人成人网在线播放| 91丝袜一区二区三区| 视频免费在线观看| 免费看黄色av| 麻豆传媒视频在线| 欧美福利网址| 国产十六处破外女视频| 国产精品久久久久久久免费看| 亚洲熟女www一区二区三区| 三级av免费看| 国产伦精品一区二区三区妓女下载| 亚洲欧美日韩综合| 狂野欧美性猛交xxxx巴西| 欧美一区二区三区四区久久| 四虎在线免费看| 欧美粗暴jizz性欧美20| 亚洲欧美日本国产专区一区| 久艹在线免费观看| 国产视频亚洲精品| 亚洲欧洲国产精品一区| 国产一二三区在线播放| 国产成人av一区二区三区在线观看| 欧美精品videossex少妇| 一区二区三区四区在线免费观看| 久久福利毛片| 男女激情视频网站| av亚洲精华国产精华精华| 久久久久久无码午夜精品直播| 成人羞羞网站入口免费| 国产一区二区久久久久| 久久精品国产2020观看福利| 在线观看日韩av电影| 精品久久久久久一区二区里番| av综合电影网站| www.久久久久.com| 日本一二三区视频| 午夜一级黄色片| 国产天堂在线播放视频| 国产免费区一区二区三视频免费| 婷婷激情综合五月天| 欧美性猛交xxxx免费看蜜桃| 国产日产欧美a一级在线| 99久久精品国产一区二区小说| 欧美性受黑人性爽| 国产精品影片在线观看| 在线观看视频免费一区二区三区| 日韩欧美一区二| 国产精品剧情一区二区三区| 男女一区二区三区免费| 国产精品亚洲a| 国产视频第二页| 国产cdts系列另类在线观看| 蜜桃成人365av| 国产成人午夜片在线观看高清观看| 日韩av影视| 国产主播在线看| 午夜精品一区二区在线观看| 秋霞午夜在线观看| 在线观看国产网站| 精品夜夜澡人妻无码av| 天天做天天爱天天爽综合网| 亚洲视频在线二区| 国产精品99久久久久久似苏梦涵| 中文字幕日韩一区二区三区不卡| 欧美不卡三区| 欧美日韩国产电影| 欧美在线性视频| 日本女人性视频| 自拍在线观看| 亚洲精品手机在线| 国产伦视频一区二区三区| 成人精品一区二区三区校园激情| 亚洲欧洲综合另类| 精品爽片免费看久久| julia一区二区中文久久94| 亚洲激情播播| 一呦二呦三呦国产精品| 国产探花视频在线观看| 亚洲国产日韩a在线播放| av电影高清在线观看| 欧美黄色小说| 精品毛片免费观看| 色猫咪免费人成网站在线观看| 日韩免费高清在线观看| 日本网站在线免费观看视频| 日韩精品免费一区二区三区| 欧美一区二区啪啪| 精品一区二区三区免费看| 欧美色综合天天久久综合精品| 宅男噜噜噜66国产日韩在线观看| 色88久久久久高潮综合影院| 亚洲最大的免费| 国产黄色三级网站| 九色精品免费永久在线| 性欧美1819sex性高清大胸| 91香蕉电影院| 国产露出视频在线观看| 亚洲国产精品久久久久爰性色| 蜜桃久久av一区| 国产91国语对白在线| 自拍偷自拍亚洲精品被多人伦好爽| 国产人妻人伦精品| 精久久久久久| 中国女人一级毛片| 欧美性猛交xxx高清大费中文| 亚洲黄色影片| 少妇人妻在线视频| 久久久久欧美精品| 成人性生生活性生交12| 成人国产精品免费视频| 国产三级国产精品国产国在线观看| av丝袜天堂网| 超碰国产在线观看| 国产精品久久久久久亚洲av| 最近中文字幕mv免费高清电影| 无码人妻久久一区二区三区蜜桃|