gdb調試設置環境變數,gdb調試可執行文件

本文目錄一覽:

gdb調試命令是什麼?

gdb調試命令如下:

1、啟動gdb

$gdb

這樣可以和gdb進行交互了。

2、啟動gdb,並且分屏顯示源代碼

$gdb -tui

這樣,使用了’-tui’選項,啟動可以直接將屏幕分成兩個部分,上面顯示源代碼,比用list方便多了。這時候使用上下方向鍵可以查看源代碼,想要命令行使用上下鍵就用[Ctrl]n和[Ctrl]p。

3、啟動gdb調試指定程序app

$gdb app

這樣就在啟動gdb之後直接載入了app可執行程序,需要注意的是,載入的app程序必須在編譯的時候有gdb調試選項,例如’gcc -g app app.c’,注意,如果修改了程序的源代碼,但是沒有編譯,那麼在gdb中顯示的會是改動後的源代碼,但是運行的是改動前的程序,這樣會導致跟蹤錯亂的。

4、啟動程序之後,再用gdb調試

$gdb program PID

這裡,program是程序的可執行文件名,PID是要調試程序的PID.如果你的程序是一個服務程序,那麼你可以指定這個服務程序運行時的進程ID。gdb會自動attach上去,並調試他。program應該在PATH環境變數中搜索得到。

5、啟動程序之後,再啟動gdb調試

$gdb PID

這裡,程序是一個服務程序,那麼你可以指定這個服務程序運行時的進程ID,PID是要調試程序的PID.這樣gdb就附加到程序上了,但是現在還沒法查看源代碼,用file命令指明可執行文件就可以顯示源代碼了。

在WINDOWS如何打開GDB調試C++程序

電腦-屬性-高級-系統變數中把gdb所在文件夾的地址加入上面和下面兩個PATH變數中

我下載了一個gdb調試器,然後我在命令行調試程序,它說gdb不內部或外部命令,也不是可運行的程序或批處理

win下把 gdb 全部放到 c:\windows\system32 下面

在cmd下啟動 gdb。

或者 你把 gdb 解壓到某個文件夾比如: d:\gdb

然後在系統環境變數里設置 PATH 變數,在裡面添加 d:\gdb 就可以了。路徑之間用分號隔開。

然後你啟動一個cmd 就可以運行gdb了。

我把修改PATH 的資料發到你消息裡面。

如何用GDB進行調試

1: 對於在應用程序中加入參數進行調試的方法:

直接用 gdb app -p1 -p2 這樣進行調試是不行的。

需要像以下這樣使用:

#gdb app

(gdb) r -p1 -p2

或者在運行run命令前使用set args命令:

(gdb) set args p1 p2

可以用show args 命令來查看

2. 加入斷點:

break linenumber

break funcName

break +offset

break -offset

(在當前行號的前面或後面的offset行停住。)

break filename:linenum

在源文件filename的linenum行處停住。

break filename:function

在源文件filename的function函數的入口處停住。

break … if

…可以是上述的參數,condition表示條件,在條件成立時停住。比如在循環境體中,可以設置 break if i=100,表示當i為100時停住程序。

3. 查看運行時的堆棧:

使用bt命令

4. 列印某個變數的值:

print val

5. 單步: n

繼續運行: c

step

單步跟蹤,如果有函數調用,他會進入該函數。

next

同樣單步跟蹤,如果有函數調用,他不會進入該函數。很像VC等工具中的step over。後面可以加count也可以不加,不加表示一條條地執行,加表示執行後面的count條指令,然後再停住。

set step-mode

set step-mode on

打開step-mode模式,於是,在進行單步跟蹤時,程序不會因為沒有debug信息而不停住。這個參數有很利於查看機器碼。

set step-mod off

關閉step-mode模式。

finish

運行程序,直到當前函數完成返回。並列印函數返回時的堆棧地址和返回值及參數值等信息。

until 或 u

當你厭倦了在一個循環體內單步跟蹤時,這個命令可以運行程序直到退出循環體。

6.在GDB中執行shell命令:

 在gdb環境中,你可以執行UNIX的shell的命令,使用gdb的shell命令來完成:

 eg. shell make

7. 運行環境

可設定程序的運行路徑。

show paths 查看程序的運行路徑。

set environment varname [=value] 設置環境變數。如:set env USER=hchen

show environment [varname] 查看環境變數。

8.觀察點(WatchPoint)

觀察點一般來觀察某個表達式(變數也是一種表達式)的值是否有變化了,如果有變化,馬上停住程 序。我們有下面的幾種方法來設置觀察點:

watch

為表達式(變數)expr設置一個觀察點。一量表達式值有變化時,馬上停住程序。

rwatch

當表達式(變數)expr被讀時,停住程序。

awatch

當表達式(變數)的值被讀或被寫時,停住程序。

info watchpoints

列出當前所設置了的所有觀察點。

9. 維護breakpoint

clear

清除所有的已定義的停止點。

clear func

清除所有設置在函數上的停止點。

delete [breakpoints] [range…]

刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range 表示斷點號的範圍(如:3-7)。其簡寫命令為d。

比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。

disable [breakpoints] [range…]

disable所指定的停止點,breakpoints為停止點號。如果什麼都不指定,表示disable所有的停止 點。簡寫命令是dis.

enable [breakpoints] [range…]

enable所指定的停止點,breakpoints為停止點號。

10、程序變數

查看文件中某變數的值:

file::variable

function::variable

可以通過這種形式指定你所想查看的變數,是哪個文件中的或是哪個函數中的。例如,查看文件f2.c中的全局變數x的值:

gdb) p ‘f2.c’::x

查看數組的值

有時候,你需要查看一段連續的內存空間的值。比如數組的一段,或是動態分配的數據的大小。你可以使用GDB的「@」操作符,「@」的左邊是第一個內存的地址的值,「@」的右邊則你你想查看內存的長度。例如,你的程序中有這樣的語句:

int *array = (int *) malloc (len * sizeof (int));

於是,在GDB調試過程中,你可以以如下命令顯示出這個動態數組的取值:

p *array@len

如果是靜態數組的話,可以直接用print數組名,就可以顯示數組中所有數據的內容了。

11.輸出格式

一般來說,GDB會根據變數的類型輸出變數的值。但你也可以自定義GDB的輸出的格式。例如,你想輸出一個整數的十六進位,或是二進位來查看這個整型變數的中的位的情況。要做到這樣,你可以使用GDB的數據顯示格式:

x 按十六進位格式顯示變數。

d 按十進位格式顯示變數。

u 按十六進位格式顯示無符號整型。

o 按八進位格式顯示變數。

t 按二進位格式顯示變數。

a 按十六進位格式顯示變數。

c 按字元格式顯示變數。

f 按浮點數格式顯示變數。

(gdb) p i

$21 = 101

(gdb) p/a i

$22 = 0x65

(gdb) p/c i

$23 = 101 ‘e’

(gdb) p/f i

$24 = 1.41531145e-43

(gdb) p/x i

$25 = 0x65

(gdb) p/t i

$26 = 1100101

11.查看內存

使用examine命令(簡寫是x)來查看內存地址中的值。x命令的語法如下所示:

x/

n、f、u是可選的參數。

n 是一個正整數,表示顯示內存的長度,也就是說從當前地址向後顯示幾個地址的內容。

f 表示顯示的格式,參見上面。如果地址所指的是字元串,那麼格式可以是s,如果地十是指令地址,那麼格式可以是i。

u 表示從當前地址往後請求的位元組數,如果不指定的話,GDB默認是4個bytes。u參數可以用下面的字元來代替,b表示單位元組,h表示雙位元組,w表示四位元組,g表示八位元組。當我們指定了位元組長度後,GDB會從指內存定的內存地址開始,讀寫指定位元組,並把其當作一個值取出來。

n/f/u三個參數可以一起使用。例如:

命令:x/3uh 0x54320 表示,從內存地址0x54320讀取內容,h表示以雙位元組為一個單位,3表示三個單位,u表示按十六進位顯示。

12.自動顯示

你可以設置一些自動顯示的變數,當程序停住時,或是在你單步跟蹤時,這些變數會自動顯示。相關的GDB命令是display。

display

display/

display/ expr

expr是一個表達式,fmt表示顯示的格式,addr表示內存地址,當你用display設定好了一個或多個表達式後,只要你的程序被停下來,GDB會自動顯示你所設置的這些表達式的值。

格式i和s同樣被display支持,一個非常有用的命令是:

display/i $pc

undisplay

delete display

刪除自動顯示,dnums意為所設置好了的自動顯式的編號。

disable display

enable display

disable和enalbe不刪除自動顯示的設置,而只是讓其失效和恢復。

info display

查看display設置的自動顯示的信息。GDB會打出一張表格,向你報告當然調試中設置了多少個自動顯示設置,其中包括,設置的編號,表達式,是否enable。

13. 設置顯示選項

set print address

set print address on

打開地址輸出,當程序顯示函數信息時,GDB會顯出函數的參數地址。系統默認為打開的,

show print address

查看當前地址顯示選項是否打開。

set print array

set print array on

打開數組顯示,打開後當數組顯示時,每個元素佔一行,如果不打開的話,每個元素則以逗號分隔。這個選項默認是關閉的。與之相關的兩個命令如下,我就不再多說了。

set print array off

show print array

set print elements

這個選項主要是設置數組的,如果你的數組太大了,那麼就可以指定一個來指定數據顯示的最大長度,當到達這個長度時,GDB就不再往下顯示了。如果設置為0,則表示不限制。

show print elements

查看print elements的選項信息。

set print null-stop

如果打開了這個選項,那麼當顯示字元串時,遇到結束符則停止顯示。這個選項默認為off。

set print pretty on

如果打開printf pretty這個選項,那麼當GDB顯示結構體時會比較漂亮。

14.關於顯示源碼list

linux下gdb調試在啟動gdb時為什麼會出現command not found

如果確實是未找到gdb ,可以用linux 光碟安裝嘛。

找到gdb 對應的rpm 包,和gcc對應的rpm包,rpm -ivh 之。

今天為了裝一個gdb頭都大了。看了網上很多方法,試著裝了5.3 6.4 6.0共3個版本,但都運行不了;方法總結如下(以6.4位列)

1、解壓,進入目錄 cd gdb-6.4

2、配置 ./configure –target=arm-linux -prefix=/usr/local/arm-linux

3、編譯 make

4.安裝 make install

5、設置環境變數 PATH=$PATH:/usr/local/arm-linux/bin

6、進入gdbserver目錄 cd gdb/gdbserver

7、./configure –target=arm-linux -host=arm-linux

8、makc CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc

網上都這麼說。但是都好像沒有成功。我也裝的很鬱悶

最後乾脆直接從可以使用gdb的機子上/usr/bin中拷了兩個文件gdb,gdbserver到我的電腦的/usr/bin目錄下,就可以使用了,吐了一口惡氣啊。希望以後有不能用gdb的朋友們先直接試試這個簡單的方法。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301083.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 14:19
下一篇 2024-12-29 14:19

相關推薦

  • 如何設置Python環境變數

    Python是一種流行的腳本編程語言,它可以在不同的操作系統和平台上運行。但是,在使用Python時,我們需要設置Python環境變數,以便系統能夠正確地找到Python解釋器和相…

    編程 2025-04-29
  • 如何配置Python環境變數在Windows 11

    在本文中,您將學習如何在Windows 11操作系統上配置Python環境變數的步驟。Python是一種高級編程語言,廣泛用於編寫Web應用程序、數據分析、人工智慧和機器學習等。在…

    編程 2025-04-29
  • Python配置環境變數的作用

    Python配置環境變數是為了讓計算機能夠更方便地找到Python語言及其相關工具的位置,使其可以在任意目錄下使用Python命令。當您安裝Python後,您需要進行環境變數設置,…

    編程 2025-04-28
  • Python3添加環境變數

    本文將從多個方面對Python3添加環境變數進行詳細闡述,包括添加環境變數的原因和方法、如何測試環境變數是否添加成功、如何在不同操作系統上添加環境變數以及常見問題的解決方法。 一、…

    編程 2025-04-27
  • 在Linux上安裝JRE並配置環境變數

    本文將從以下幾個方面為您詳細闡述如何在Linux系統上,通過自己賬戶安裝JRE,並且配置環境變數。 一、安裝JRE 在進行安裝前,我們需要下載JRE的安裝包並解壓,可以從官方網站下…

    編程 2025-04-27
  • Ubuntu修改Python環境變數的方法

    Python 是一種非常流行的編程語言,支持多種平台,包括 Windows、Mac 和 Linux。在 Linux 系統中,實現 Python 的各種版本之間的切換可以通過修改環境…

    編程 2025-04-25
  • 深入剖析系統環境變數path

    一、path到底是什麼 Path是Windows操作系統中的一個環境變數,是一個用於確定操作系統去哪些目錄中尋找命令或應用程序的一組目錄名。它通常包含了一些系統默認的目錄,比如C:…

    編程 2025-04-25
  • 配置JDK的環境變數Win10

    一、下載JDK 在進行環境配置前,需要先下載對應的JDK。首先需要確認自己的Windows系統的位數(32位或者64位),然後從官網下載相應的JDK安裝包。 下載鏈接:https:…

    編程 2025-04-25
  • 如何配置hadoop環境變數

    一、下載和安裝 首先,我們需要下載和安裝hadoop。可以從官方網站上下載最新版本的hadoop,也可以使用鏡像站點下載。下載完成後,解壓縮文件並安裝。以下是在Ubuntu系統上使…

    編程 2025-04-24
  • 在Linux中安裝JDK1.8並配置環境變數

    一、下載並安裝JDK1.8 1、訪問官方網站https://www.oracle.com/java/technologies/javase/javase-jdk8-download…

    編程 2025-04-24

發表回復

登錄後才能評論