日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

gdb 调试利器

發(fā)布時(shí)間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb 调试利器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. gdb 調(diào)試?yán)?/span>

GDB是一個(gè)由GNU開(kāi)源組織公布的、UNIX/LINUX操作系統(tǒng)下的、基于命令行的、功能強(qiáng)大的程序調(diào)試工具。對(duì)于一名Linux下工作的c++程序猿,gdb是不可缺少的工具;

1.1. 啟動(dòng)gdb

對(duì)C/C++程序的調(diào)試。須要在編譯前就加上-g選項(xiàng):

$g++ -g hello.cpp -o hello

調(diào)試可運(yùn)行文件:

$gdb <program>

program也就是你的運(yùn)行文件。一般在當(dāng)前文件夾下。

調(diào)試core文件(core是程序非法運(yùn)行后core dump后產(chǎn)生的文件):

$gdb <program> <core dump file> $gdb program core.11127

調(diào)試服務(wù)程序:

$gdb <program> <PID> $gdb hello 11127

假設(shè)你的程序是一個(gè)服務(wù)程序,那么你能夠指定這個(gè)服務(wù)程序執(zhí)行時(shí)的進(jìn)程ID。

gdb會(huì)自己主動(dòng)attach上去,并調(diào)試他。program應(yīng)該在PATH環(huán)境變量中搜索得到。

1.2. gdb交互命令

啟動(dòng)gdb后,進(jìn)入到交互模式,通過(guò)下面命令完畢對(duì)程序的調(diào)試。注意高頻使用的命令一般都會(huì)有縮寫(xiě),熟練使用這些縮寫(xiě)命令能提高調(diào)試的效率;

執(zhí)行

  • run:簡(jiǎn)記為 r 。其作用是執(zhí)行程序,當(dāng)遇到斷點(diǎn)后,程序會(huì)在斷點(diǎn)處停止執(zhí)行,等待用戶(hù)輸入下一步的命令。

  • continue (簡(jiǎn)寫(xiě)c ):繼續(xù)執(zhí)行,到下一個(gè)斷點(diǎn)處(或執(zhí)行結(jié)束)
  • next:(簡(jiǎn)寫(xiě) n),單步跟蹤程序。當(dāng)遇到函數(shù)調(diào)用時(shí),也不進(jìn)入此函數(shù)體。此命令同 step 的主要差別是,step 遇到用戶(hù)自己定義的函數(shù),將步進(jìn)到函數(shù)中去執(zhí)行,而 next 則直接調(diào)用函數(shù),不會(huì)進(jìn)入到函數(shù)體內(nèi)。
  • step (簡(jiǎn)寫(xiě)s):單步調(diào)試假設(shè)有函數(shù)調(diào)用。則進(jìn)入函數(shù);與命令n不同,n是不進(jìn)入調(diào)用的函數(shù)的
  • until:當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí)。這個(gè)命令能夠執(zhí)行程序直到退出循環(huán)體。

  • until+行號(hào): 執(zhí)行至某行,不只用來(lái)跳出循環(huán)
  • finish: 執(zhí)行程序,直到當(dāng)前函數(shù)完畢返回,并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息。

  • call 函數(shù)(參數(shù)):調(diào)用程序中可見(jiàn)的函數(shù)。并傳遞“參數(shù)”,如:call gdb_test(55)
  • quit:簡(jiǎn)記為 q ,退出gdb

設(shè)置斷點(diǎn)

  • break n (簡(jiǎn)寫(xiě)b n):在第n行處設(shè)置斷點(diǎn)

    (能夠帶上代碼路徑和代碼名稱(chēng): b OAGUPDATE.cpp:578)

  • b fn1 if a>b:條件斷點(diǎn)設(shè)置

  • break func(break縮寫(xiě)為b):在函數(shù)func()的入口處設(shè)置斷點(diǎn)。如:break cb_button

  • delete 斷點(diǎn)號(hào)n:刪除第n個(gè)斷點(diǎn)

  • disable 斷點(diǎn)號(hào)n:暫停第n個(gè)斷點(diǎn)

  • enable 斷點(diǎn)號(hào)n:開(kāi)啟第n個(gè)斷點(diǎn)

  • clear 行號(hào)n:清除第n行的斷點(diǎn)

  • info b (info breakpoints) :顯示當(dāng)前程序的斷點(diǎn)設(shè)置情況

  • delete breakpoints:清除全部斷點(diǎn):

查看源碼

  • list :簡(jiǎn)記為 l ,其作用就是列出程序的源碼,默認(rèn)每次顯示10行。

  • list 行號(hào):將顯示當(dāng)前文件以“行號(hào)”為中心的前后10行代碼,如:list 12
  • list 函數(shù)名:將顯示“函數(shù)名”所在函數(shù)的源碼。如:list main
  • list :不帶參數(shù),將接著上一次 list 命令的,輸出下邊的內(nèi)容。

打印表達(dá)式

  • print 表達(dá)式:簡(jiǎn)記為 p 。當(dāng)中“表達(dá)式”能夠是不論什么當(dāng)前正在被測(cè)試程序的有效表達(dá)式,比方當(dāng)前正在調(diào)試C語(yǔ)言的程序。那么“表達(dá)式”能夠是不論什么C語(yǔ)言的有效表達(dá)式,包含數(shù)字。變量甚至是函數(shù)調(diào)用。
  • print a:將顯示整數(shù) a 的值
  • print ++a:將把 a 中的值加1,并顯示出來(lái)
  • print name:將顯示字符串 name 的值
  • print gdb_test(22):將以整數(shù)22作為參數(shù)調(diào)用 gdb_test() 函數(shù)
  • print gdb_test(a):將以變量 a 作為參數(shù)調(diào)用 gdb_test() 函數(shù)
  • display 表達(dá)式:在單步執(zhí)行時(shí)將很實(shí)用,使用display命令設(shè)置一個(gè)表達(dá)式后,它將在每次單步進(jìn)行指令后,緊接著輸出被設(shè)置的表達(dá)式及值。如: display a
  • watch 表達(dá)式:設(shè)置一個(gè)監(jiān)視點(diǎn)。一旦被監(jiān)視的“表達(dá)式”的值改變,gdb將強(qiáng)行終止正在被調(diào)試的程序。

    如: watch a

  • whatis :查詢(xún)變量或函數(shù)
  • info function: 查詢(xún)函數(shù)
  • 擴(kuò)展info locals: 顯示當(dāng)前堆棧頁(yè)的全部變量

查詢(xún)執(zhí)行信息

  • where/bt :當(dāng)前執(zhí)行的堆棧列表;
  • bt backtrace 顯示當(dāng)前調(diào)用堆棧
  • up/down 改變堆棧顯示的深度
  • set args 參數(shù):指定執(zhí)行時(shí)的參數(shù)
  • show args:查看設(shè)置好的參數(shù)
  • info program: 來(lái)查看程序的是否在執(zhí)行,進(jìn)程號(hào),被暫停的原因。

切割窗體

  • layout:用于切割窗體。能夠一邊查看代碼,一邊測(cè)試:
  • layout src:顯示源碼窗體
  • layout asm:顯示反匯編窗體
  • layout regs:顯示源碼/反匯編和CPU寄存器窗體
  • layout split:顯示源碼和反匯編窗體
  • Ctrl + L:刷新窗體

注解

交互模式下直接回車(chē)的作用是反復(fù)上一指令。對(duì)于單步調(diào)試很方便。

1.3. 更強(qiáng)大的工具

cgdb

cgdb能夠看作gdb的界面增強(qiáng)版,用來(lái)替代gdb的 gdb -tui。cgdb主要功能是在調(diào)試時(shí)進(jìn)行代碼的同步顯示,這無(wú)疑添加了調(diào)試的方便性,提高了調(diào)試效率。界面類(lèi)似vi,符合unix/linux下開(kāi)發(fā)者習(xí)慣;假設(shè)熟悉gdb和vi,差點(diǎn)兒能夠馬上使用cgdb。

轉(zhuǎn)載于:https://www.cnblogs.com/jhcelue/p/6886105.html

總結(jié)

以上是生活随笔為你收集整理的gdb 调试利器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。