使用gdb除錯正在執行的程式
阿新 • • 發佈:2019-01-03
一般來說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>
首先,要求被除錯的程式在-g編譯的前提下,
先開個新的視窗ps -u 找到需要除錯對應的程序編號
然後進入gdb 通過 使用attach+程序編號的方式,就可以對該程序進行除錯了,結下了的如檢視 修改值等類似於gdb常規的除錯方式。