⑴ linux fork進程怎麼調試
如果你想跟蹤子進程進行調試,可以使用set follow-fork-mode mode來設置fork跟隨模式。
set follow-fork-mode 所帶的mode參數可以是以下的一種:
parent
gdb只跟蹤父進程,不跟蹤子進程,這是默認的模式。
child
gdb在子進程產生以後只跟蹤子進程,放棄對父進程的跟蹤。
進入gdb以後,我們可以使用show follow-fork-mode來查看目前的跟蹤模式。
可以看到目前使用的模式是parent。
然而,有的時候,我們想同時調試父進程和子進程,以上的方法就不能滿足了。Linux提供了set detach-on-fork mode命令來供我們使用。其使用的mode可以是以下的一種:
on
只調試父進程或子進程的其中一個(根據follow-fork-mode來決定),這是默認的模式。
off
父子進程都在gdb的控制之下,其中一個進程正常調試(根據follow-fork-mode來決定)
另一個進程會被設置為暫停狀態。
同樣,show detach-on-fork顯示了目前是的detach-on-fork模式,如上圖。
以上是調試fork產生子進程的情況,但是如果子進程使用exec系統函數而裝載了新程序執行呢?——我們使用set follow-exec-mode mode提供的模式來跟蹤這個exec裝載的程序。mode可以是以下的一種:
new 當發生exec的時候,如果這個選項是new,則新建一個inferior給執行起來的子進程,而父進程的inferior仍然保留,當前保留的inferior的程序狀態是沒有執行。
same 當發生exec的時候,如果這個選項是same(默認值),因為父進程已經退出,所以自動在執行exec的inferior上控制子進程。