1. 程式人生 > >使用gdb除錯正在執行的程式

使用gdb除錯正在執行的程式

一般來說GDB主要除錯的是C/C++的程式。要除錯C/C++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如:

$gcc -g -Wall hello.c -o hello
$g++ -g -Wall hello.cpp -o hello

如果沒有-g,你將看不見程式的函式名、變數名,所代替的全是執行時的記憶體地址。當你用-g把除錯資訊加入之後,併成功編譯目的碼以後,讓我們來看看如何用gdb來除錯他。

啟動GDB的方法有以下幾種:

  • gdb <program>
program也就是你的執行檔案,一般在當前目錄下。
  • gdb <program> core
用gdb同時除錯一個執行程式和core檔案,core是程式非法執行後core dump後產生的檔案。
  • gdb <program> <PID>
如果你的程式是一個服務程式,那麼你可以指定這個服務程式執行時的程序ID。gdb會自動attach上去,並除錯他。program應該在PATH環境變數中搜索得到。

以上三種都是進入gdb環境和載入被除錯程式同時進行的。也可以先進入gdb環境,在載入被除錯程式,方法如下:

*在終端輸入:gdb
*在gdb環境中:file <program>
這兩步等價於:gdb <program>
對於gdb常用的除錯方式,也基本都會,但是當被問到如何對已經執行的程式進行除錯時,就不知道怎麼處理了,因此在網上查詢資料發現可以通過以下方式

首先,要求被除錯的程式在-g編譯的前提下,

先開個新的視窗ps -u 找到需要除錯對應的程序編號

然後進入gdb 通過 使用attach+程序編號的方式,就可以對該程序進行除錯了,結下了的如檢視 修改值等類似於gdb常規的除錯方式。