GDB 簡介

GDB 是什麼php

GDB 是 linux 環境下的通常功能強大的調試器,用來調試 C 或 C++ 寫的程序。它能夠作這些事情linux

  1. Start your program, specifying anything that might affect its behavior.
  2. Make your program stop on specified conditions.
  3. Examine what has happened, when your program has stopped.
  4. Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.

安裝centos

以 centos 7 爲例,安裝 GDB-8.2.1 版本數組

安裝依賴app

C++ 11 編譯器和 GUN make 是 GDB 必要的工具包,需先安裝他們。函數

yum install gcc*
-- 或者爲了省事,直接把開發經常使用的工具包都安裝了
yum group install "Development Tools"

-- 查看是否安裝成功
gcc -v # 需 4.8 以上版本

gun make 官網地址工具

安裝 GDB學習

官網上找到官方的 FTP 倉庫,下載最新的版本,解壓後開始安裝spa

./configure --prefix=/usr/local/gdb821
make && make install

安裝完成將 /usr/local/gdb821/bin 添加到 PATH 環境變量

-- 也能夠直接用 yum 安裝

yum install -y gdb

安裝須要花比較久時間,能夠洗個澡乾點愛乾的事。調試

gdb -v

使用示例

一個簡單的示例,運行一個 PHP 腳本 gdb_test.php

<?php

for($i = 0; $i < 10; $i++){
    if(in_array($i,[1,9,20])){                                                                                                        
        echo $i*$i,PHP_EOL;
    }      
}

開始調試

gdb php

> run /usr/local/src/gdb_test.php

clipboard.png

這樣腳本就執行成功了,實驗了第一個命令。

後續再詳細學習斷點,單步調試等真正的實驗。

附:GDB 經常使用命令

  1. backtrace:顯示棧信息。簡寫爲bt。
  2. frame x 切換到第x幀。其中x會在bt命令中顯示,從0開始。0表示棧頂。簡寫爲f。
  3. up/down x 往棧頂/棧底移動x幀。當不輸入x時,默認爲1。
  4. print x打印x的信息,x能夠是變量,也能夠是對象或者數組。簡寫爲p。
  5. print */&x 打印x的內容/地址。
  6. call 調用函數。注意此命令須要一個正在運行的程序。
  7. set substitute-path from_path to_path,替換源碼文件路徑。當編譯機與運行程序的機器代碼路徑不一樣時,須要使用該指令替換代碼路徑,不然你沒法在gdb中看到源碼。
  8. break x.cpp:n 在x.cpp的第n行設置斷點,而後gdb會給出斷點編號m。命令可簡寫爲b。後面會對break命令進行更詳細的解釋。
  9. continue 繼續運行程序。進入調試模式後,若你已經獲取了你須要的信息或者須要程序繼續運行時使用。可簡寫爲c
  10. until 執行到當前循環完成。可簡寫爲u
  11. step 單步調試,步入當前函數。可簡寫爲s
  12. next 單步調試,步過當前函數。可簡寫爲n
  13. finish 執行到當前函數返回
  14. set var x=10 改變當前變量x的值。也能夠這樣用:set {int}0x83040 = 10把內存地址0x83040的值強制轉換爲int並賦值爲10
  15. info locals 打印當前棧幀的本地變量
  16. jump使當前執行的程序跳轉到某一行,或者跳轉到某個地址。因爲只會使程序跳轉而不會改變棧值,所以若跳出函數到另外的地方 會致使return出錯。另外,熟悉彙編的人都知道,程序運行時,有一個寄存器用於保存當前代碼所在的內存地址。因此,jump命令也就是改變了這個寄存器中的值。因而,你能夠使用「set $pc」來更改跳轉執行的地址。如: set $pc = 0x485
  17. return: 強制函數返回。能夠指定返回值
相關文章
相關標籤/搜索