色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > gdb使用流程

gdb使用流程 時間:2018-09-21      來源:未知

這里給出了一個短小的程序,由此帶領讀者熟悉 gdb 的使用流程。建議讀者能夠動手實際操作一下。

首先,打開Linux 下的編輯器vi 或者emacs,編輯如下代碼。

/*test.c*/

#include

int sum(int m);

int main()

{

int i, n = 0;

sum(50);

for(i = 1; i<= 50; i++)

{

n += i;

}

printf("The sum of 1-50 is %d \n", n );

}

int sum(int m)

{

int i, n = 0;

for (i = 1; i <= m; i++)

{

n += i;

printf("The sum of 1-m is %d\n", n);

}

}

在保存退出后首先使用 gcc 對test.c 進行編譯,注意一定要加上選項"-g",這樣編譯出的可執行代碼中才包含調試信息,否則之后gdb 無法載入該可執行文件。

[root@localhost gdb]# gcc -g test.c -o test

雖然這段程序沒有錯誤,但調試完全正確的程序可以更加了解gdb 的使用流程。接下來就啟動gdb 進行調試。注意,gdb 進行調試的是可執行文件,而不是如".c"的源代碼,因此,需要先通過gcc 編譯生成可執行文件才能用gdb 進行調試。

[root@localhost gdb]# gdb test

GNU gdb Red Hat Linux (6.3.0.0-1.21rh)

Copyright 2004 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library

"/lib/libthread_db.so.1".

(gdb)

可以看出,在gdb 的啟動畫面中指出了gdb 的版本號、使用的庫文件等信息,接下來就進入了由"(gdb)"開頭的命令行界面了。

(1)查看文件。

在 gdb 中鍵入"l"(list)就可以查看所載入的文件,如下所示。

(gdb) l

1 #include

2 int sum(int m);

3 int main()

4 {

5 int i,n = 0;

6 sum(50);

7 for(i = 1; i <= 50; i++)

8 {

9 n += i;

10 }

(gdb) l

11 printf("The sum of 1~50 is %d \n", n );

12

13 }

14 int sum(int m)

15 {

16 int i, n = 0;

17 for(i = 1; i <= m; i++)

18 {

19 n += i;

20 }

21 printf("The sum of 1~m is = %d\n", n);

20 }

可以看出,gdb 列出的源代碼中明確地給出了對應的行號,這樣就可以大大地方便代碼的定位。

(2)設置斷點。

設置斷點是調試程序中一個非常重要的手段,它可以使程序運行到一定位置時暫停。因此,程序員在該位置處可以方便地查看變量的值、堆棧情況等,從而找出代碼的癥結所在。

在 gdb 中設置斷點非常簡單,只需在"b"后加入對應的行號即可(這是常用的方式,另外還有其他方式設置斷點),如下所示:

(gdb) b 6

Breakpoint 1 at 0x804846d: file test.c, line 6.

要注意的是,在gdb 中利用行號設置斷點是指代碼運行到對應行之前將其停止,如上例中,代碼運行到第6 行之前暫停(并沒有運行第6 行)。

(3)查看斷點情況。

在設置完斷點之后,用戶可以鍵入"info b"來查看設置斷點情況,在gdb 中可以設置多個斷點。

(gdb) info b

Num Type Disp Enb Address What

1 breakpoint keep y 0x0804846d in main at test.c:6

用戶在斷點鍵入"backrace"(只輸入"bt"即可)可以查到調用函數(堆棧)的情況,這個功能在程序調試之中使用非常廣泛,經常用于排除錯誤或者監視調用堆棧的情況。

(gdb) b 19

(gdb) c

Breakpoin 2, sum(m=50) at test.c:19

19 printf("The sum of 1-m is %d\n", n);

(gdb) bt

#0 sum(m=50) at test.c:19 /* 停在test.c 的sum()函數,第19 行*/

#1 0x080483e8 in main() at test.c:6 /* test.c 的第6 行調用sum 函數*/

(4)運行代碼。

接下來就可運行代碼了,gdb 默認從首行開始運行代碼,鍵入"r"(run)即可(若想從程序中指定行開始運行,可在r 后面加上行號)。

(gdb) r

Starting program: /root/workplace/gdb/test

Reading symbols from shared object read from target memory...done.

Loaded system supplied DSO at 0x5fb000

Breakpoint 1, main () at test.c:6

6 sum(50);

可以看到,程序運行到斷點處就停止了。

(5)查看變量值。

在程序停止運行之后,程序員所要做的工作是查看斷點處的相關變量值。在 gdb 中鍵入"p"+變量值即可,如下所示:

(gdb) p n

$1 = 0

(gdb) p i

$2 = 134518440

在此處,為什么變量"i"的值為如此奇怪的一個數字呢?原因就在于程序是在斷點設置的對應行之前停止的,那么在此時,并沒有把"i"的數值賦為零,而只是一個隨機的數字。但變量"n"是在第4 行賦值的,故在此時已經為零。

(6)單步運行。

單步運行可以使用命令"n"(next)或"s"(step),它們之間的區別在于:若有函數調用的時候,"s"會進入該函數而"n"不會進入該函數。因此,"s"就類似于Uisual 等工具中的"step in","n"類似與Uisual等工具中的"step over"。它們的使用如下所示:

(gdb) n

The sum of 1-m is 1275

7 for (i = 1; i <= 50; i++)

(gdb) a

sum (m=50) at test.c:16

16 int i, n = 0;

可見,使用"n"后,程序顯示函數sum()的運行結果并向下執行,而使用"s"后則進入sum()函數之中單步運行。

(7)恢復程序運行

在查看完所需變量及堆棧情況后,就可以使用命令"c"(continue)恢復程序的正常運行了。這時,它會把剩余還未執行的程序執行完,并顯示剩余程序中的執行結果。以下是之前使用"n"命令恢復后的執行結果:

(gdb) c

Continuing.

The sum of 1-50 is :1275

Program exited with code 031.

可以看出,程序在運行完后退出,之后程序處于"停止狀態"。

上一篇:嵌入式開發中的gzip打包命令

下一篇:Thumb 編程模型

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 亚洲一本大道无码av天堂 | 亚洲精品码| 国产在线青青不卡 | freeXXXX国产HD中文对白 | 久久久麻豆精品一区二区 | 一本一本久久A久久综合精品蜜桃 | 人妻精品久久久久中文字幕 | 日韩视频1| 成年女人看片永久免费视频 | 久久精品国产精品久久久 | 久久久久人妻一区精品性色AV | 亚洲欧美日韩成人高清在线一区 | 亚洲日韩蜜桃av在线观看 | 精品无码一区二区三区爱欲九九 | 99久久精品国产综合 | 香港日本三级亚洲三级 | 免费看一区二区成人a片 | 亚洲欧洲日韩一区 | 内插射精大群交在线 | 丰满爆乳在线播放 | 免费视频好湿好紧好大好爽 | 色老板在线永久免费视频 | 男人让女人爽的免费视频 | 欧美人妻一区二区三区 | 最新国产拍偷乱偷精品 | 中文字幕在线视频一区二区三区 | 他揉捏她两乳不停呻吟人妻 | 熟妇高潮精品一区二区三区 | 性欧美乱妇COME| 两个人的www免费高清视频 | 高清国产精品人妻一区二区 | 亚洲中文字幕无码一久久区 | 激情亚洲一区国产精品 | 人妻精品久久久久中文字幕 | 午夜三级理论在线观看 | 日本大片免A费观看视频三区 | 熟妇无码乱子成人精品 | 久久精品国产亚洲77777 | 粗长巨龙挤进新婚少妇 | 波多野结衣二区 | 污网址在线观看免费入口 |