歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux gdb調試入門

Linux gdb調試入門

日期:2017/3/3 12:38:05   编辑:Linux技術

沒有使用過gdb調試過程序的覺得gdb是個很神奇的東東,如果你使用它調試一次保證你想忘記它都難,下面看看它的廬山真面目吧!

GDB概述GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在UNIX平台下做軟件,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。所謂“寸有所長,尺有所短”就是這個道理。

一般來說,GDB主要幫忙你完成下面四個方面的功能:

1、啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。

2、可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)

3、當程序被停住時,可以檢查此時你的程序中所發生的事。

4、動態的改變你程序的執行環境。

從上面看來,GDB和一般的調試工具沒有什麼兩樣,基本上也是完成這些功能,不過在細節上,你會發現GDB這個調試工具的強大,大家可能比較習慣了圖形化的調試工具,但有時候,命令行的調試工具卻有著圖形化工具所不能完成的功能。讓我們一一看來。

#include<iostream>
using namespace std;
int sum(int arg1,int arg2)
{
        return arg1+arg2;
}
int main()
{
        int a=1;
        int b=2;
        cout<<"sum = "<<sum(a,b)<<endl;
        return 0;

}
第一步:編譯

[root@localhost CppProject]# g++ -g sum.cpp -o sum

查看下文件

第二步:使用gdb設置斷點調試

[root@localhost CppProject]# gdb sum

(gdb) l
1       #include<iostream>
2       using namespace std;
3       int sum(int arg1,int arg2)
4       {
5               return arg1+arg2;
6       }
7       int main()
8       {
9               int a=1;
10              int b=2;
(gdb) 
11              cout<<"sum = "<<sum(a,b)<<endl;
12              return 0;
13
14      }
(gdb)
在第11行設置斷點

(gdb) break 11

Breakpoint 1 at 0x8048742: file sum.cpp, line 11.

直接在函數名處設置斷點

(gdb) break sum

Breakpoint 2 at 0x80486a7: file sum.cpp, line 5.

查看已設置斷點信息

(gdb) info break

Num Type Disp Enb Address What

1 breakpoint keep y 0x08048742 in main at sum.cpp:11

2 breakpoint keep y 0x080486a7 in sum(int, int) at sum.cpp:5

運行:

(gdb) run

Starting program: /root/CppProject/sum

Breakpoint 1, main () at sum.cpp:11

11 cout<<"sum = "<<sum(a,b)<<endl;

查看代碼:

(gdb) l

(gdb) l
1       #include<iostream>
2       using namespace std;
3       int sum(int arg1,int arg2)
4       {
5               return arg1+arg2;
6       }
7       int main()
8       {
9               int a=1;
10              int b=2;
(gdb) 
11              cout<<"sum = "<<sum(a,b)<<endl;
12              return 0;
13
14      }
(gdb)
(gdb) n表示next單步進行

Breakpoint 1, main () at sum.cpp:11

11 cout<<"sum = "<<sum(a,b)<<endl;

(gdb) n

sum = 3

12 return 0;

(gdb)

gdb下查看變量的值:p 變量名

(gdb) p a

$1 = 1

(gdb) p b

$2 = 2

查看函數內存地址:

(gdb) p sum

$3 = {int (int, int)} 0x80486a4 <sum(int, int)>

(gdb) p sum(a,b)

$4 = 3

調用函數

(gdb) p sum(100,200)

$5 = 300

斷點調試就這麼多了,有興趣的可以學習設置觀察點,捕捉點調試。

Copyright © Linux教程網 All Rights Reserved