c gdb 繫結原始碼 GDB列出原始碼

2021-10-16 15:32:40 字數 1894 閱讀 9198

在使用 gdb 除錯程式時,我們會經常需要展示程式中的**,但是列印出的**可能和原始檔中的不同,為什麼這麼說呢?我們在《gdb準備除錯階段》章節中講到過 gcc 編譯器允許-g和-o選項同時使用,也就是說 gdb 可以除錯優化後的程式。優化的程式中會在原始檔中的某些地方改變,所以和編寫的檔案和程式執行的檔案不一致是常見的。

在 gdb 中展示出**行有很多的好處,其中最主要的好處就是方便除錯。例如,我們需要在程式中的某一處設定斷點,如果沒有**展示,會很難實現斷點的準確定位。

list命令

展示程式中的**行要使用 list 命令,命令的格式有很多,下面就是對這個命令的詳細介紹。

1.不帶引數的 list 命令的使用表示從當前行向下列印,預設顯示 10 行**。

2.標記中心行位置列印**,命令格式展示如下:

list [location]

(gdb) list 2                      //以第二行為中心行開始列印。

(gdb) list func                 //以func函式所在行為中心行列印。

(gdb) list *0x1234             //以標記位址所在行為中心行列印。

3.指明 list 列印的開始位置和結束位置,命令格式展示如下:

list [first] , [last]

first 為列印的起始位置,last 表示列印的結束位置。如果不指明 first 的值表示從當前行開始列印。例項:

(gdb) list 1 , 5            //列印從第一行開始,到第五行結束。

(gdb) list  , 5               //列印從當前行開始,到第五行結束。

4.list 命令從當前行開始偏移,偏移量可以自己指定。命令格式展示如下:

list  (+/-)[num]

num 表示當前行的偏移量,+ 表示向下偏移,- 表示向上偏移。例項:

(gdb) list +2           //從當前行向下偏移 2 行

(gdb) list -2            //從當前行向上偏移 2 行

注意:如果程式執行到斷點處使用 list 命令,gdb 會將斷點處所在行設定為中心行列印**。

設定 list 列印行數

在 gdb 中使用 list 命令預設列印的**行數為 10 行,其實**列印的行數是可以更改的,我們可以通過設定 gdb 中的 listsize 實現,命令格式如下:

set listsize [num]

num 表示設定的**列印的行數。例項:

set listsize 5          //設定列印的行數為 5 行。

set listsize 6          //設定列印的行數為 6 行。

顯示 listsize 的值可以使用命令:

show listsize

綜合除錯例項

檔案**展示:

#include

#include

int add(int a,int b)

return a + b;

int main(void)

int a = 10;

int b = 20;

int c;

c = add(a,b);

printf("%d",c);

return 0;

gdb除錯:

(gdb) l

1#include

2#include

4int add(int a,int b)

59int main(void)

10(gdb) list -2

14c = add(a,b);

15printf("%d",c);

16return 0;

17}

cgdb 一起邊看原始碼邊除錯gdb吧

cgdb是一款輕量級的基於gdb的命令列視覺化工具,關係大致如下 儘管gdb本身可以通過layout src的命令顯示原始碼布局,但是其功能還是過於簡陋。使用cgdb並不需要你重新去學習過多額外的命令,你依然可以像原來使用gdb一樣去使用它。直接系統安裝 可能非最新版本 sudo apt get i...

cgdb原始碼安裝及錯誤

linux版本 linux version 2.6.32 431.el6.x86 64 gcc version 4.4.7 20120313 red hat 4.4.7 4 gcc 1 smp fri nov 22 03 15 09 utc 2013 wget 安裝步驟 1 tar zvxf cgd...

使用gdb除錯nginx原始碼

葉劍峰 包含鏈結 這裡就不說了,谷歌一搜一堆,這裡推薦一篇文章 gdb 命令詳細解釋 請重點看一下step,run,break,list,info,continue命令 這裡使用nginx 1.0.14 src是源 auto資料夾是configure執行時候的各種命令集合 由於gdb需要gcc的時候...