歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux下多進程的調試

Linux下多進程的調試:

(1)follow-fork-mode

set follow-fork-mode [parent | child] ———— fork之後選擇調試父進程還是子進程

(parent: fork之後繼續調試父進程;child: fork之後調試父進程。默認的是fork之後調試父進程)

set detach-on-fork [on | off] ———— 指示gdb在fork之後是否斷開某個進程的調試,或交由gdb控制

(on: 斷開調試follow-fork-mode指定的進程;off: gdb將控制父進程和子進程,follow-fork-mode指定的進程將被調試,另一個進程置於暫停狀態)

(2)attach pid

Ubuntu下gdb要使用attach pid權限是不夠的,需要切換到root,或者你可以sudo chmod +s /usr/bin/gdb給gdb添加權限。

使用attach需要在父子進程代碼最開始添加sleep()語句,讓進程睡眠,之後在後台運行進程,通過ps獲取子進程pid,最後attach pid進入調試子進程。

eg:

$./test &            //使進程test在後台運行

$ps -ef | grep test        //查看進程pid

結果中類似下面的形式:

XXX 12345 23456 ———————————————— ./test        //父進程

XXX 12346 12345 ———————————————— ./test        //子進程,這裡的第一個數字就是子進程pid

$ gdb -q test

(gdb)attach 12346        //attach到子進程

添加的sleep()可以是類似這樣的語句:

while(pause)        //pause是一個標志變量

sleep(1);

在gdb調試時你只需要set pause=0使條件不滿足即可執行後續代碼。

(3)gdb wrapper

當父進程fork出子進程,子進程會緊接著調用exec函數來執行新的代碼,這時也可以用gdb wrapper。它的優點是不用添加額外代碼。

Linux下將一個進程放到後台運行:

(1)./test &

(2)"./test" 之後按下 "ctrl+z" , 用"bg %num"返回的數字將該進程放到後台;

Linux下將進程拉回前台:

用"fg %num"

GDB調試程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

GDB+GDBserver無源碼調試Android 動態鏈接庫的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

使用hello-gl2建立ndk-GDB環境(有源碼和無源碼調試環境) http://www.linuxidc.com/Linux/2013-06/85935.htm

在Ubuntu上用GDB調試printf源碼 http://www.linuxidc.com/Linux/2013-03/80346.htm

Linux下用GDB調試可加載模塊 http://www.linuxidc.com/Linux/2013-01/77969.htm

Ubuntu下使用GDB斷點Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

Copyright © Linux教程網 All Rights Reserved