【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧
生活随笔
收集整理的這篇文章主要介紹了
【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- 上一篇文章學(xué)習(xí)了如何使用GDB進(jìn)行函數(shù)調(diào)用棧的查看:【軟件開(kāi)發(fā)底層知識(shí)修煉】十六 快速學(xué)習(xí)GDB調(diào)試四 使用GDB進(jìn)行函數(shù)調(diào)用棧的查看
- 本篇文章是GDB調(diào)試快速學(xué)習(xí)系列的最后一篇。將綜合前幾篇文章做一個(gè)小的總結(jié)以及介紹一些在調(diào)試中使用的小技巧
文章目錄
- 1 調(diào)試中的小技巧
- 1.1 斷點(diǎn)處自動(dòng)打印示例
- 1.2 使用GDB進(jìn)行符號(hào)查看
- 2 使用GDB進(jìn)行代碼調(diào)試中的技巧案例分析
- 3 總結(jié)
1 調(diào)試中的小技巧
直接上一個(gè)圖,下面就是今天介紹的幾個(gè)技巧命令:
- 其中shell命令,后面代碼調(diào)試分析的時(shí)候就明白了。
1.1 斷點(diǎn)處自動(dòng)打印示例
- 可以看出,當(dāng)我們?cè)趖est.c的18行打上斷點(diǎn),運(yùn)行程序到斷點(diǎn)處,然后使用display命令,打印幾個(gè)值。那么在下一次,如果程序繼續(xù)運(yùn)行,又到了test.c的18行的這個(gè)斷點(diǎn)處,那么GDB會(huì)自動(dòng)將剛剛使用display打印的那幾個(gè)值打印出來(lái)。而不用像我們以前一樣,每一次想看哪個(gè)值都需要使用print命令。
1.2 使用GDB進(jìn)行符號(hào)查看
- 符號(hào)查看可以看到符號(hào)的類型。并且我們從上圖中也可以看到whatis與ptype的區(qū)別:ptype可以查看更加詳細(xì)的類型。
2 使用GDB進(jìn)行代碼調(diào)試中的技巧案例分析
tricks.c
#include <stdio.h>int g_var = 1;struct ST {int i;int j; };int func() {struct ST st[5] = {0};int i = 0;for(i=0; i<5; i++){st[i].i = i;st[i].j = i * i;}for(i=0; i<5; i++){printf("st[%d].i = %d\n", i, st[i].i);printf("st[%d].j = %d\n", i, st[i].j);} }int main() {static c_var = 2;func();return 0; }- 上述程序比較簡(jiǎn)單,這里不多做解釋
- 我們以前都是編譯好程序之后,再進(jìn)入GDB進(jìn)行調(diào)試。現(xiàn)在知道GDB支持shell,那么可以在先進(jìn)入GDB后,再進(jìn)行編譯。在GDB中,前面加上shell命令,后面可以跟任何shell所支持的命令,如下動(dòng)態(tài)圖就是支持shell的各種命令的演示,編譯好程序后直接start:
- 然后我們對(duì)tricks.c的18行進(jìn)行打斷點(diǎn)(使用break tricks.c:18命令)。并使用list tricks.c:18 命令查看tricks.c的18行上下的部分內(nèi)容。如下圖:
- 我們發(fā)現(xiàn),這個(gè)展示的內(nèi)容不夠詳細(xì),我們想要展示tricks.c的18行上下附近更多的內(nèi)容,可以使用set listsize 20來(lái)設(shè)置list每次展示的內(nèi)容的行數(shù),如下圖所示:
- 接下繼續(xù)運(yùn)行程序:continue
- 到了18行的時(shí)候,就停下來(lái)了,此時(shí)我們使用如下三個(gè)命令來(lái)顯示i,i*i,以及&i :
display /d i
display /d i*i
display /a &i - 結(jié)果如下圖所示:
- 可以看到,每一次展示都打印出了我們所想要的值。接著我們繼續(xù)運(yùn)行程序:continue 由于有一個(gè)for循環(huán),所以還會(huì)在18行再次停止執(zhí)行,然而這次停止執(zhí)行后,就會(huì)自動(dòng)打印剛剛我們使用display所想要展示的三個(gè)值,如下圖:
- 很明顯,我們并沒(méi)有再使用display或者print來(lái)打印那三個(gè)變量,但是在這里卻自動(dòng)打印了。這就是斷點(diǎn)處自動(dòng)打印的功能:display的功能
- 我們退出剛剛的GDB調(diào)試,再重新進(jìn)入GDB調(diào)試,然后直接只用run進(jìn)行運(yùn)行程序,發(fā)現(xiàn)上一次設(shè)置的斷點(diǎn)和display的設(shè)置還在。使用undisplay即可去除display的設(shè)置。然后繼續(xù)運(yùn)行程序:continue,程序在18行斷點(diǎn)處停下,然后我們可以使用下面的一些命令查看程序的一些符號(hào)信息:
- 上圖中紅色是輸入的命令,黃色是顯示的類型。
- 通過(guò)上述的命令練習(xí),我們學(xué)會(huì)了如何在程序運(yùn)行過(guò)程中查看符號(hào)的信息。
3 總結(jié)
- 學(xué)會(huì)使用display進(jìn)行斷點(diǎn)處自動(dòng)打印功能
- 學(xué)會(huì)使用whatis與ptype進(jìn)行查看符號(hào)的信息
-
本文章參考狄泰軟件學(xué)院相關(guān)課程 想學(xué)習(xí)的可以加狄泰軟件學(xué)院群, 群聊號(hào)碼:199546072
-
學(xué)習(xí)探討加個(gè)人(可以免費(fèi)幫忙下載CSDN資源):
-
qq:1126137994
-
微信:liu1126137994
-
學(xué)習(xí)交流資源分享qq群:962535112
總結(jié)
以上是生活随笔為你收集整理的【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2014届华为校园招聘机试题2
- 下一篇: 思科关闭日志_Cisco命令日志