歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux下進行GDB調試

Linux下進行GDB調試

日期:2017/3/1 17:03:29   编辑:關於Linux
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。
Copyright © Linux教程網 All Rights Reserved