gdb用法(三) 除錯其他正在執行的程序

2021-08-25 21:07:01 字數 1200 閱讀 6698

有時會遇到一種很特殊的除錯需求,對當前正在執行的其它程序進行除錯。這種情況有可能發生在那些無法直接在偵錯程式中執行的程序身上,例如有的程序只能在系統啟動時執行。另外如果需要對程序產生的子程序進行除錯的話,也只能採用這種方式。gdb可以對正在執行的程式進行排程,它允許開發人員中斷程式並檢視其狀態,之後還能讓這個程式正常地繼續執行。

gdb提供了兩種方式來除錯正在執行的程序:

一種是在gdb命令列上指定程序的pid,另一種是在gdb中使用「attach」命令。

例如,開發人員可以先啟動debugme程式,讓其開始等待使用者的輸入。示例如下:

#./debugme

enter a string to count words:

接下去在另乙個虛擬控制台中用下面的命令查出該程序對應的程序號:

# ps -ax | grep debugme

555 pts/1 s 0:00 ./debugme

得到程序的pid後,就可以使用gdb對其進行除錯了:

# gdb debugme 555

gnu gdb red hat linux (5.3post-0.20021129.18rh)

attaching to program: /home/xiaowp/debugme, process 555

reading symbols from /lib/libc.so.6...done.

……

在上面的輸出資訊中,以attaching to program開始的行表明gdb已經成功地附加在pid為555的程序上了 。

另外一種連線到其它程序的方法是先用file命令載入除錯時所需的符號表,然後再通過「attaché」命令進行連線:

(gdb) file /home/xiaowp/debugme

reading symbols from /home/xiaowp/debugme...done.

(gdb) attach 555

……

如果想知道程式現在執行到了**,同樣可以使用「backtrace」命令。

當然也可以使用「step」命令對程式進行單步除錯。

在完成除錯之後,不要忘記用detach命令斷開連線,讓被除錯的程序可以繼續正常執行:

gdb除錯正在執行的程序

有時會遇到一種很特殊的除錯需求,對當前正在執行的其它程序進行除錯 正是我今天遇到的情形 這種情況有可能發生在那些無法直接在偵錯程式中執行的程序身上,例如有的程序 只能在系統啟動時執行。另外如果需要對程序產生的子程序進行除錯的話,也只能採用這種方式。gdb可以對正在執行的程式進行排程,它允許開發人員中...

gdb除錯正在執行程序

用gdb可以除錯當前的程式的使用情況,讀出他的引數。以下用乙個簡單的程式做為例子 來說明gdb的除錯。第一步 編譯乙個死迴圈程式。file name malloc.c include include include void getmem void p,int num void test void ...

把正在執行的程式拉進gdb除錯

gdb 是 linux 系統上常用的 c c 除錯工具,功能十分強大。對於較為複雜的系統,比如多程序系統,如何使用 gdb 除錯呢?考慮下面這個三程序系統 proc2 是 proc1 的子程序,proc3 又是 proc2 的子程序。如何使用 gdb 除錯 proc2 或者 proc3 呢?實際上,...