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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 上一篇文章學習了如何使用GDB進行函數調用棧的查看:【軟件開發底層知識修煉】十六 快速學習GDB調試四 使用GDB進行函數調用棧的查看
  • 本篇文章是GDB調試快速學習系列的最后一篇。將綜合前幾篇文章做一個小的總結以及介紹一些在調試中使用的小技巧

文章目錄

  • 1 調試中的小技巧
    • 1.1 斷點處自動打印示例
    • 1.2 使用GDB進行符號查看
  • 2 使用GDB進行代碼調試中的技巧案例分析
  • 3 總結

1 調試中的小技巧

直接上一個圖,下面就是今天介紹的幾個技巧命令:

  • 其中shell命令,后面代碼調試分析的時候就明白了。

1.1 斷點處自動打印示例

  • 可以看出,當我們在test.c的18行打上斷點,運行程序到斷點處,然后使用display命令,打印幾個值。那么在下一次,如果程序繼續運行,又到了test.c的18行的這個斷點處,那么GDB會自動將剛剛使用display打印的那幾個值打印出來。而不用像我們以前一樣,每一次想看哪個值都需要使用print命令。

1.2 使用GDB進行符號查看

  • 符號查看可以看到符號的類型。并且我們從上圖中也可以看到whatis與ptype的區別:ptype可以查看更加詳細的類型。

2 使用GDB進行代碼調試中的技巧案例分析

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; }
  • 上述程序比較簡單,這里不多做解釋
  • 我們以前都是編譯好程序之后,再進入GDB進行調試。現在知道GDB支持shell,那么可以在先進入GDB后,再進行編譯。在GDB中,前面加上shell命令,后面可以跟任何shell所支持的命令,如下動態圖就是支持shell的各種命令的演示,編譯好程序后直接start:
  • 然后我們對tricks.c的18行進行打斷點(使用break tricks.c:18命令)。并使用list tricks.c:18 命令查看tricks.c的18行上下的部分內容。如下圖:
  • 我們發現,這個展示的內容不夠詳細,我們想要展示tricks.c的18行上下附近更多的內容,可以使用set listsize 20來設置list每次展示的內容的行數,如下圖所示:
  • 接下繼續運行程序:continue
  • 到了18行的時候,就停下來了,此時我們使用如下三個命令來顯示i,i*i,以及&i :
    display /d i
    display /d i*i
    display /a &i
  • 結果如下圖所示:
  • 可以看到,每一次展示都打印出了我們所想要的值。接著我們繼續運行程序:continue 由于有一個for循環,所以還會在18行再次停止執行,然而這次停止執行后,就會自動打印剛剛我們使用display所想要展示的三個值,如下圖:
  • 很明顯,我們并沒有再使用display或者print來打印那三個變量,但是在這里卻自動打印了。這就是斷點處自動打印的功能:display的功能
  • 我們退出剛剛的GDB調試,再重新進入GDB調試,然后直接只用run進行運行程序,發現上一次設置的斷點和display的設置還在。使用undisplay即可去除display的設置。然后繼續運行程序:continue,程序在18行斷點處停下,然后我們可以使用下面的一些命令查看程序的一些符號信息:
  • 上圖中紅色是輸入的命令,黃色是顯示的類型。
  • 通過上述的命令練習,我們學會了如何在程序運行過程中查看符號的信息。

3 總結

  • 學會使用display進行斷點處自動打印功能
  • 學會使用whatis與ptype進行查看符號的信息
  • 本文章參考狄泰軟件學院相關課程 想學習的可以加狄泰軟件學院群, 群聊號碼:199546072

  • 學習探討加個人(可以免費幫忙下載CSDN資源):

  • qq:1126137994

  • 微信:liu1126137994

  • 學習交流資源分享qq群:962535112

總結

以上是生活随笔為你收集整理的【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。