gdb常用命令的用法


  今天花了幾分鍾來學習使用gdb調試程序,有過以前使用IDE調試程序的基礎,僅僅只需要花幾分鍾就能夠很快的學會使用gdb命令來調試程序了。這里結合實例來說明怎么使用gdb命令。首先寫一個簡單的程序,然后載對程序進行調試。

    用於調試的示例程序:

示例代碼
 1 #include <stdio.h>
 2 
 3 int sum(int a, int b)
 4 {
 5     int result;
 6     result = a + b;
 7     return result;
 8 }
 9 
10 int main(int argc, char ** argv)
11 {
12     if (argc != 3)
13     {
14         printf("請輸入2個數字參數,用空格分開");
15         return -1;
16     }
17     int a = *argv[1]-'0';
18     int b = *argv[2]-'0';
19     int re = sum(a,b);
20     printf("%d + %d = %d",a,b,re);
21     return 0;
22 }

 

  這個程序很簡單,只做了個加法運算。現在我們開始調試程序了。

  1.編譯生成。     

  IDE中分Debug和Release版本,那么在Linux我們一般編譯這個文件使用:

    gcc -o testgdb testgdb.c 

    這就相當於IDE中的Release版本的編譯生成工作了,那么怎么編譯出Debug版本呢?這樣,只需要添加 -g 命令就行:

    gcc -o testgdb testgdb.c -g

  2.進入調試狀態,即進入dgb。 

    進入gdb有兩種方式,一種是直接輸入命令gdb。另一種是在gdb后面加上第一步編譯好的文件名。進入到gdb調試狀態后可以看到

GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.

(gdb)

    如果使用的是第一種方式,那么進入后得繼續使用file命令來打開待調試的文件:(gdb)file testgdb

    會給出如下提示信息:

    Reading symbols from /home/hanxi/cpp/testgdb/testgdb...done.

  3.調試程序。   

    常用命令:

GDB常用命令 格式 含義 簡寫
list List [開始,結束] 列出文件的代碼清單 l
prit Print 變量名 打印變量內容 p
break Break [行號或函數名] 設置斷點 b
continue Continue [開始,結束] 繼續運行 c
info Info 變量名 列出信息 i
next Next 下一行 n
step Step 進入函數(步入) S
display Display 變量名 顯示參數  
file File 文件名(可以是絕對路徑和相對路徑) 加載文件  
run Run args 運行程序 r

 

    接下來對一個一個命令進行測試。(注:(gdb)后面是輸入的命令和參數)

       (1):  (gdb)run 2 3    

    表示執行調試並傳入兩個參數2,3

    運行結果:

Starting program: /home/hanxi/cpp/testgdb/testgdb 2 3
2 + 3 = 5
Program exited normally. 

    這樣就出現了計算結果,因為沒有設置斷點,所以就會執行完程序。下面就是使用設置斷點的命令了。

       (2):    (gdb)b 4   

    表示在第4行設置斷點,gdb給出以下提示說明設置斷點成功

Breakpoint 1 at 0x80483ca: file testgdb.c, line 4.

    設置完斷點后,我們再來運行程序,執行run命令。出現下面的提示信息:

Starting program: /home/hanxi/cpp/testgdb/testgdb 2 3

Breakpoint 1, sum (a=2, b=3) at testgdb.c:6
6 result = a + b;

    這樣它停留在第6行了。我們怎么來繼續執行了,使用c命令,相當於VS中的快捷鍵F5

    (3):     (gdb)c   

    繼續執行程序,gdb給出以下提示信息

Continuing.
2 + 3 = 5
Program exited normally.

    這里又把程序執行完了,因為前面只設置一個斷點。那么我們怎么知道設置了多少個斷點呢?使用info break命令就能滿足

    (4):     (gdb)info break   

    gdb給出了下面的提示信息: 

Num Type Disp Enb Address What
2 breakpoint keep y 0x080483ca in sum at testgdb.c:4
breakpoint already hit 1 time

    這信息提示我們,已經在第4行設置了一個斷點,接下來就是去除斷點的問題了,我們怎么把剛才的斷點刪除掉呢?在VS6.0是重復點工具欄的鼠型圖標,在VS2010是點擊每行的行首。在這里,我們也可以使用命令簡單的刪除或者禁用斷點。刪除斷點的命令是delete b,禁用斷點的命令是disable b。推薦使用disable b 命令。恢復禁用的斷點的命令是enable b。這些命令后面可以帶參數來說明第幾個斷點(是第幾個不是第幾行)。如:

    (5):     (gdb)disable b   

    然后執行run命令后就不會斷點了,接着使用enable b命令后再使用run命令,這樣又有了斷點。有時候我們斷點了就需要查看某個變量的值,那么使用什么命令查看變量的值和設置變量的值呢?答案是使用display或者是p

    (6):     (gdb)display result   

    這個效果在IDE中也有對應的:display相當於添加監聽變量,每一次run后都會給出result的值。而print就對應着IDE中的鼠標停留時顯示變量的值。

    (7):     (gdb)s   

    這是步入命令step,同樣也有步過命令next(簡寫為n)。

  好吧,上面說的一些基本命令用來調試一些小代碼差不多夠用了,剛百度搜索了下,百度文庫中有個不錯的詳細教程,如果有想深入的朋友可以進去Linux下GDB教程看看。 如果平時使用的時候忘記了命令也可以使用help命令來查看幫助信息,會提示一些命令的用法,只可惜是英語的,一般也能將就的看懂,實在看不懂的可以把可能的命令測試就ok了。下面是輸入help命令后的信息:

List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.

        上面的提示是:比如說你想查看斷點(breakpoints)的信息可以使用help breakpoints命令。希望各位看了這文章的朋友們可以學到點東西!歡迎拍磚!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM