在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ gdb 調(diào)試?yán)?/span>
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢(xún)進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤(pán)管理
size 查看程序內(nèi)存映像大小
free 查詢(xún)可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會(huì)使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶(hù)管理工具
程序調(diào)試
ldd 查看程序依賴(lài)庫(kù)
文本處理

gdb 調(diào)試?yán)?/h1>

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

啟動(dòng)gdb

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

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

調(diào)試可執(zhí)行文件::

$gdb <program>

program也就是你的執(zhí)行文件,一般在當(dāng)前目錄下。

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

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

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

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

如果你的程序是一個(gè)服務(wù)程序,那么你可以指定這個(gè)服務(wù)程序運(yùn)行時(shí)的進(jìn)程ID。gdb會(huì)自動(dòng)attach上去,并調(diào)試他。program應(yīng)該在PATH環(huán)境變量中搜索得到。

gdb交互命令

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

運(yùn)行

  • run:簡(jiǎn)記為 r ,其作用是運(yùn)行程序,當(dāng)遇到斷點(diǎn)后,程序會(huì)在斷點(diǎn)處停止運(yùn)行,等待用戶(hù)輸入下一步的命令。
  • continue (簡(jiǎn)寫(xiě)c ):繼續(xù)執(zhí)行,到下一個(gè)斷點(diǎn)處(或運(yùn)行結(jié)束)
  • next:(簡(jiǎn)寫(xiě) n),單步跟蹤程序,當(dāng)遇到函數(shù)調(diào)用時(shí),也不進(jìn)入此函數(shù)體;此命令同 step 的主要區(qū)別是,step 遇到用戶(hù)自定義的函數(shù),將步進(jìn)到函數(shù)中去運(yùn)行,而 next 則直接調(diào)用函數(shù),不會(huì)進(jìn)入到函數(shù)體內(nèi)。
  • step (簡(jiǎn)寫(xiě)s):?jiǎn)尾秸{(diào)試如果有函數(shù)調(diào)用,則進(jìn)入函數(shù);與命令n不同,n是不進(jìn)入調(diào)用的函數(shù)的
  • until:當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí),這個(gè)命令可以運(yùn)行程序直到退出循環(huán)體。
  • until+行號(hào): 運(yùn)行至某行,不僅僅用來(lái)跳出循環(huán)
  • finish: 運(yùn)行程序,直到當(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á)式”可以是任何當(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á)式:在單步運(yùn)行時(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)運(yùn)行信息

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

分割窗口

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

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

更強(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í)慣;如果熟悉gdb和vi,幾乎可以立即使用cgdb。