真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux中g(shù)db的入門使用教程

前言

創(chuàng)新互聯(lián)長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為開陽企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,開陽網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

gdb是linux下非常好用的一個調(diào)試工具,雖然它是命令行模式的調(diào)試工具,但是它的功能強(qiáng)大到你無法想象,這里簡單介紹下gdb的使用方法,需要的朋友們下面來一起看看詳細(xì)的介紹吧。

斷點(diǎn)

在代碼的指定位置中斷,使程序在此中斷。

  • break 在進(jìn)入指定函數(shù)時停住
  • break 在指定行號停住。
  • break +/-offset 在當(dāng)前行號的前面或后面的offset行停住。offiset為自然數(shù)。
  • break filename:linenum 在源文件filename的linenum行處停住。
  • break ... if ...可以是上述的參數(shù),condition表示條件,在條件成立時停住。比如在循環(huán)境體中,可以設(shè)置break if i=100,表示當(dāng)i為100時停住程序。

案例:

(gdb) break sc_smartcontract_handler.cpp:45
Breakpoint 4 at 0x424d42: file sc_smartcontract_handler.cpp, line 45.

對斷點(diǎn)的相關(guān)操作

  • delete 刪除所有斷點(diǎn)
  • delete breakpoint [n] 刪除某個斷點(diǎn)
  • disable breakpoint [n] 禁用某個斷點(diǎn)
  • enable breakpoint [n] 使能某個斷點(diǎn)
  • info breakpoints [n] 查看當(dāng)前斷點(diǎn)信息

觀察點(diǎn)

捕捉點(diǎn)用來補(bǔ)捉程序運(yùn)行時的一些事件。如:載入共享庫(動態(tài)鏈接庫)、C++的異常等。通常也是用來定位bug。

捕捉點(diǎn)的命令格式是:catch ,event可以是下面的內(nèi)容

  • watch 變量發(fā)生變化時中斷
  • rwatch 變量被讀時中斷
  • awatch 變量值被讀或被寫時中斷

可以通過info watchpoints [n]命令查看當(dāng)前觀察點(diǎn)信息

查看變量

最常用的查看變量的方法是

(gdb) print {變量名}

(gdb) print argc
$1 = 1

如果打印數(shù)組,由于默認(rèn)的設(shè)置,可能打印的數(shù)組尾部部分沒有顯示,可以通過如下的命令設(shè)置打印數(shù)組的最大長度

(gdb) set print elements 300

調(diào)試中查看代碼

  • list function 如list main:顯示main函數(shù)附近的代碼
  • list file:function 如list main.c:main:顯示main.c中的main函數(shù)附近的代碼
  • list n1,n2 如list 10,20,顯示當(dāng)前文件的10到20行

雖然list已經(jīng)很方便了, 但還是不盡人意. 如果能夠在運(yùn)行的同時顯示代碼就好了, 答案是肯定的.

使用如下命令啟動gdb: gdb -tui 項(xiàng)目名 或者在啟動gdb后, 輸入命令focus,如圖:

linux中g(shù)db的入門使用教程

恢復(fù)程序運(yùn)行和單步調(diào)試

在gdb中,和調(diào)試步進(jìn)相關(guān)的命令主要有如下幾條:

  • continue 繼續(xù)運(yùn)行程序直到下一個斷點(diǎn)(類似于VS里的F5)
  • next 逐過程步進(jìn),不會進(jìn)入子函數(shù)(類似VS里的F10)
  • setp 逐語句步進(jìn),會進(jìn)入子函數(shù)(類似VS里的F11)
  • until 運(yùn)行至當(dāng)前語句塊結(jié)束
  • finish 運(yùn)行至函數(shù)結(jié)束并跳出,并打印函數(shù)的返回值(類似VS的Shift+F11)

在特定線程中中斷

你可以定義你的斷點(diǎn)是否在所有的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工作。

  • break thread
  • break thread if ...

linespec指定了斷點(diǎn)設(shè)置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,你可以通過"info threads"命令來查看正在運(yùn)行程序中的線程信息。如果你不指定thread 則表示你的斷點(diǎn)設(shè)在所有線程上面。你還可以為某線程指定斷點(diǎn)條件。如:

(gdb) break frik.c:13 thread 28 if bartab > lim

當(dāng)你的程序被GDB停住時,所有的運(yùn)行線程都會被停住。這方便你你查看運(yùn)行程序的總體情況。而在你恢復(fù)程序運(yùn)行時,所有的線程也會被恢復(fù)運(yùn)行。那怕是主進(jìn)程在被單步調(diào)試時。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。


分享標(biāo)題:linux中g(shù)db的入門使用教程
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jsojhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部