日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux中多进程调试,linux下用gdb调试多进程

發布時間:2023/12/2 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中多进程调试,linux下用gdb调试多进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天來學習一下linux下gdb如何調試多進程,在學習之前我我們能先看一張表:

這張表是gdb調試的命令表,這對那些對gdb不熟的同學來說是非常有必要的。

一、多進程調試的命令

1、set follow-fork-mode parent|child

因為gdb在一般情況下,只會調試主進程。這條命令就可以使gdb來實現多進程的調試,進入gdb后默認調試的是parent,要想調試child的話,需要設置set follow-fork-mode child,然后進入調試。當然這種方式只能同時調試一個進程。

show follow-fork-mode就是查看當前調試的fork的模式。

2、detach-on-fork on|off:

設置為on,只調試父進程或子進程其中一個,需要根據follow-fork-mode決定,這是默認模式。

設置成off,父子進程都在gdb的控制之下,其中一個進程正常調試,需要根據follow-fork-mode決定,另一個進程會被設置為暫停狀態。

GDB將每一個被調試程序的執行狀態記錄在一個名為inferior的結構中。一般情況下一個inferior對應一個進程,每個不同的inferior有不同的地址空間。inferior有時候會在進程沒有啟動的時候就存在。

3、info inferiors:

這條語句是為了顯示GDB調試的所有inferior,GDB會為他們分配ID。其中帶有*的進程是正在調試的inferior。

4、inferior num:

切換需要調試的進程的id

5、add-inferior [-copies n] [-exec executable]:

增加n個inferior并執行程序為executable。如果不指定n只增加一個inferior。如果不指定executable,則執行程序留空,增加后可使用file命令重新指定執行程序。這時候創建的inferior其關聯的進程并沒啟動。

6、clone-inferior [-copies n] [infno]:

復制n個編號是infno的inferior。如果不指定n的話,就只復制一個inferior。如果不指定infno,則就復制正在調試的inferior。

7、detach inferior infno:

detach掉編號是infno的inferior。注意這個inferior還存在,可以再次用run命令執行它

8、kill inferior infno:

kill掉infno號inferior。注意這個inferior仍然存在,可以再次用run等命令執行它

9、remove-inferior infno:

刪除一個infno號的inferior。如果inferior正在運行,則不能刪除,所以刪除前需要先kill或者detach這個inferior

10、set schedule-multiple on|off:

設為off:只有當前inferior會執行。

設為on:全部是執行狀態的inferior都會執行。

這個選項類似于多線程調試里的set scheduler-locking選項

如果scheduler-locking是指為on,即使schedule-multiple設置為on,也只有當前進程的當前線程會執行。

11、set follow-exec-mode new|same:

設置same:當發生exec的時候,在執行exec的inferior上控制子進程。

設置為new:新建一個inferior給執行起來的子進程。而父進程的inferior仍然保留,當前保留的inferior的程序狀態是沒有執行。

show follow-exec-mode:查看follow-exec-mode設置的模式。

12、set print inferior-events on|off:用來打開和關閉inferior狀態的提示信息。

show print inferior-events :查看print inferior-events設置的狀態。

13、maint info program-spaces:

用來顯示當前GDB一共管理了多少地址空間。

二、多進程的代碼

#include

#include

#include

#include

#include

int main()

{

pid_t id = fork();

if(id < 0)

{

perror("fork error!");

return -1;

}

else if(id == 0)

{

printf("child is: %d,father is: %dn",getpid(),getppid());

}

else

{

sleep(1);

printf("father is :%dn",getpid());

wait(NULL);

}

return 0;

}

三、調試情況

在編譯的時候別忘了加上 -g(我剛開始就是犯了這樣的錯……)

1、設置調試的模式:

2、這是查看兩個進程的情況:

如果大家需要切換要調試的進程可以使用上面我們提到過得命令:inferior 進程id這樣就可以切換者調試其他的進程了。

注意:我們看見的進程前的*號,就表示當前正在調試的進程。

總結

以上是生活随笔為你收集整理的linux中多进程调试,linux下用gdb调试多进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。