色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > gdb使用流程

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

這里給出了一個(gè)短小的程序,由此帶領(lǐng)讀者熟悉 gdb 的使用流程。建議讀者能夠動(dòng)手實(shí)際操作一下。

首先,打開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 對(duì)test.c 進(jìn)行編譯,注意一定要加上選項(xiàng)"-g",這樣編譯出的可執(zhí)行代碼中才包含調(diào)試信息,否則之后gdb 無法載入該可執(zhí)行文件。

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

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

[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 的啟動(dòng)畫面中指出了gdb 的版本號(hào)、使用的庫文件等信息,接下來就進(jìn)入了由"(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 列出的源代碼中明確地給出了對(duì)應(yīng)的行號(hào),這樣就可以大大地方便代碼的定位。

(2)設(shè)置斷點(diǎn)。

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

在 gdb 中設(shè)置斷點(diǎn)非常簡單,只需在"b"后加入對(duì)應(yīng)的行號(hào)即可(這是常用的方式,另外還有其他方式設(shè)置斷點(diǎn)),如下所示:

(gdb) b 6

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

要注意的是,在gdb 中利用行號(hào)設(shè)置斷點(diǎn)是指代碼運(yùn)行到對(duì)應(yīng)行之前將其停止,如上例中,代碼運(yùn)行到第6 行之前暫停(并沒有運(yùn)行第6 行)。

(3)查看斷點(diǎn)情況。

在設(shè)置完斷點(diǎn)之后,用戶可以鍵入"info b"來查看設(shè)置斷點(diǎn)情況,在gdb 中可以設(shè)置多個(gè)斷點(diǎn)。

(gdb) info b

Num Type Disp Enb Address What

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

用戶在斷點(diǎn)鍵入"backrace"(只輸入"bt"即可)可以查到調(diào)用函數(shù)(堆棧)的情況,這個(gè)功能在程序調(diào)試之中使用非常廣泛,經(jīng)常用于排除錯(cuò)誤或者監(jiān)視調(diào)用堆棧的情況。

(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()函數(shù),第19 行*/

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

(4)運(yùn)行代碼。

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

(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);

可以看到,程序運(yùn)行到斷點(diǎn)處就停止了。

(5)查看變量值。

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

(gdb) p n

$1 = 0

(gdb) p i

$2 = 134518440

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

(6)單步運(yùn)行。

單步運(yùn)行可以使用命令"n"(next)或"s"(step),它們之間的區(qū)別在于:若有函數(shù)調(diào)用的時(shí)候,"s"會(huì)進(jìn)入該函數(shù)而"n"不會(huì)進(jìn)入該函數(shù)。因此,"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"后,程序顯示函數(shù)sum()的運(yùn)行結(jié)果并向下執(zhí)行,而使用"s"后則進(jìn)入sum()函數(shù)之中單步運(yùn)行。

(7)恢復(fù)程序運(yùn)行

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

(gdb) c

Continuing.

The sum of 1-50 is :1275

Program exited with code 031.

可以看出,程序在運(yùn)行完后退出,之后程序處于"停止?fàn)顟B(tài)"。

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

下一篇:Thumb 編程模型

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 中文精品99久久国产香蕉| 欧美日韩亚洲高清| 亚洲欧美日韩另类| 亚洲天堂网在线观看| 国产不卡精品视男人的天堂| 亚洲成人久久久| 日av在线播放中文不卡| 韩国日本不卡在线| 日本韩国欧美精品大片卡二| 国产精品久久在线观看| 亚洲激情电影中文字幕| 欧美大荫蒂xxx| 午夜精品久久久久久久99热| 欧美成人激情视频免费观看| 国产精品美女在线| 日韩亚洲欧美中文在线| 日本精品视频网站| 精品国偷自产在线视频| 国产免费一区二区三区香蕉精| 久久九九热免费视频| 91精品啪在线观看麻豆免费| 精品久久香蕉国产线看观看亚洲| 成人网在线免费看| 久久久久久久久中文字幕| 国产一区二区久久精品| 国产精品青草久久久久福利99| 欧美成人网在线| 日韩精品在线私人| 国产成人精品日本亚洲| 欧美日韩国产色| 亚洲欧美在线看| 国产精品网站入口| 欧美视频免费在线观看| 一区二区亚洲欧洲国产日韩| 国产精品最新在线观看| 久久久久久中文字幕| 色先锋资源久久综合5566| 亚洲综合一区二区不卡| 日本一区二三区好的精华液| 久久99久久久久久久噜噜| 亚洲色图50p|