1.單進程的調試
常規的通過gdb cmd這種方式開啟調試,特別說明的是通過attach的方法附加到一個指定的進程上去進行調試,這種方法適合於調試一個已經運行的進程,具體用法:
gdb -p [pid]
此時被attach的進程會阻塞,進入T模式(ps 命令看到STATE為T),如果調試完畢了,使用 detach 命令就釋放了進程,它就自由運行了。
2.多進程的調試
使用gdb調試多進程時,如果想要在進程間進行切換,那么就需要在fork調用前設置: set detach-on-fork off ,然后使用 info inferiors 來查看進程信息,得到的信息可以看到最前面有一個進程編號,使用 inferior num 來進行進程切換。
那么為什么要使用 set detache-on-fork off 呢?它的意思是在調用fork后相關進程的運行行為是怎么樣的,是detache on/off ?也就是說分離出去獨立運行,不受gdb控制還是不分離,被阻塞住。這里還涉及到一個設置 set follow-fork-mode [parents/child] ,就是fork之后,gdb的控制落在誰身上,如果是父進程,那么分離的就是子進程,反之亦然。如果detache-on-fork被off了,那么未受控的那個進程就會被阻塞住,進程狀態為T,即處於調試狀態。