Linux下進行GDB調試

來源:互聯網
上載者:User

Linux下進行GDB調試 GDB是GNU開源組織發布的一個強大的UNIX下的程式調試工具一般來說,GDB主要協助自己完成下面四個方面的功能;1:啟動你的程式,可以按照你的自訂的要求隨心所欲的運行程式2:可以讓被調試的程式在你所指定的調製的斷點處停住(斷點可以是條件運算式)3:當程式被停住時,可以檢查你的程式中發生的事4:動態改變你程式的執行環境  www.2cto.com  利用print命令可以檢查各個變數的值。   (gdb)print p (p為變數名)  print是gdb的一個功能很強的命令,利用它可以顯示被調試的語言中任何有效運算式。運算式除了包含你程式中的變數外,還可以包含以下內容:  對程式中函數的調用   (gdb)print find_entry(1,0)   資料結構和其他複雜物件  (gdb)print *table_start   ={e=reference=’\000’,location=0x0,next=0x0}  值的曆史成分   (gdb)print(為記錄變數,在以後可以直接引用的值)   因此,要想顯示在h後面的10個元素,可以使用h@10:  (gdb)printh@10   =(-1,345,23,-234,0,0,0,98,345,10)  whatis命令可以顯示某個變數的類型   (gdb)whatis p   type= int *  www.2cto.com  break命令(可以簡寫為b)可以用來在調試的程式中設定斷點,該命令有如下四種形式:  breakline-number 使程式恰好在執行給定行之前停止。  breakfunction-name 使程式恰好在進入指定的函數之前停止。  breakline-or-function if condition 如果condition(條件)是真,程式到達指定行或函數時停止。  breakroutine-name 在指定常式的入口處設定斷點  如果該程式是由很多原檔案構成的,你可以在各個原檔案中設定斷點,而不是在當前的原檔案中設定斷點,其方法如下:  (gdb)break filename:line-number   (gdb)break filename:function-name   要想設定一個條件斷點,可以利用breakif命令,如下所示:   (gdb)break line-or-function if expr finish結束執行的當前函數,顯示其傳回值 一個程式例子 來源程式:tst.c  1#include <stdio.h>   2  3int func(int n)   4{   5int sum=0,i;   6for(i=0; i<=n; i++)   7{   8sum+=i;   9}   10return sum;   11}   12  13  14main()   15{   16int i;   17long result = 0;   18for(i=1; i<=100; i++)   19{   20result += i;    21}   22  23printf("result[1-100] = %d \n", result );   24printf("result[1-250] = %d \n", func(250) );   25}   編譯產生執行檔案:(Linux下)  hchen/test>gcc -g tst.c -o tst   使用GDB調試:  hchen/test>gdb tst <---------- 啟動GDB  GNUgdb 5.1.1   Copyright2002 Free Software Foundation, Inc.   GDBis free software, covered by the GNU General Public License, and youare   welcometo change it and/or distribute copies of it under certain conditions.  Type"show copying" to see the conditions.   Thereis absolutely no warranty for GDB. Type "show warranty" fordetails.   ThisGDB was configured as "i386-suse-linux"...   (gdb)l <-------------------- l命令相當於list,從第一行開始例出原碼。  1#include <stdio.h>   2  3int func(int n)   4{   5int sum=0,i;   6for(i=0; i<=n; i++)   7{   8sum+=i;   9}   10return sum; 整個過程:首先寫出原始碼檔案 寫出之後進行編譯產生不帶.c的可執行檔命令 gcc -g tst.c -o tst再進行啟用GDB來調試 gdbtst  www.2cto.com   (gdb)l l命令相當於list,從第一行開始例出原碼。 (gdb)break 16 設定斷點,在來源程式16行處 breakfunc <-------------------- 設定斷點,在函數func()入口處。 (gdb)infobreak 察看斷點資訊(r)運行程式 ,run命令簡寫 (gdb)n <--------------------- 單條語句執行,next命令簡寫。 gdb)c <--------------------- 繼續運行程式,continue命令簡寫。 (gdb)p sum gdb)bt <--------------------- 查看函數堆棧。 (gdb)finish <--------------------- 退出函數。  (gdb)c <--------------------- 繼續運行。 gdb)q <--------------------- 退出gdb。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.