六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

linux如何調(diào)試多進(jìn)程程序

時(shí)間: 孫勝652 分享

  在Linux系統(tǒng)操作中,經(jīng)常會(huì)遇到多進(jìn)程調(diào)試的問(wèn)題,其實(shí)多進(jìn)程的調(diào)試沒有想象中的那么復(fù)雜,下面學(xué)習(xí)啦小編就給大家介紹下Linux如何調(diào)試多進(jìn)程程序,感興趣的朋友不妨來(lái)了解下。

  多進(jìn)程的調(diào)試:

  (1)follow-fork-mode

  set follow-fork-mode [parent | child] ———— fork之后選擇調(diào)試父進(jìn)程還是子進(jìn)程

  (parent: fork之后繼續(xù)調(diào)試父進(jìn)程;child: fork之后調(diào)試父進(jìn)程。默認(rèn)的是fork之后調(diào)試父進(jìn)程)

  set detach-on-fork [on | off] ———— 指示gdb在fork之后是否斷開某個(gè)進(jìn)程的調(diào)試,或交由gdb控制

  (on: 斷開調(diào)試follow-fork-mode指定的進(jìn)程;off: gdb將控制父進(jìn)程和子進(jìn)程,follow-fork-mode指定的進(jìn)程將被調(diào)試,另一個(gè)進(jìn)程置于暫停狀態(tài))

  (2)attach pid

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

  使用attach需要在父子進(jìn)程代碼最開始添加sleep()語(yǔ)句,讓進(jìn)程睡眠,之后在后臺(tái)運(yùn)行進(jìn)程,通過(guò)ps獲取子進(jìn)程pid,最后attach pid進(jìn)入調(diào)試子進(jìn)程。

  eg:

  $./test & //使進(jìn)程test在后臺(tái)運(yùn)行

  $ps -ef | grep test //查看進(jìn)程pid

  結(jié)果中類似下面的形式:

  XXX 12345 23456 ———————————————— 。/test //父進(jìn)程

  XXX 12346 12345 ———————————————— 。/test //子進(jìn)程,這里的第一個(gè)數(shù)字就是子進(jìn)程pid

  $ gdb -q test

  (gdb)attach 12346 //attach到子進(jìn)程

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

  while(pause) //pause是一個(gè)標(biāo)志變量

  sleep(1);

  在gdb調(diào)試時(shí)你只需要set pause=0使條件不滿足即可執(zhí)行后續(xù)代碼。

  (3)gdb wrapper

  當(dāng)父進(jìn)程fork出子進(jìn)程,子進(jìn)程會(huì)緊接著調(diào)用exec函數(shù)來(lái)執(zhí)行新的代碼,這時(shí)也可以用gdb wrapper。它的優(yōu)點(diǎn)是不用添加額外代碼。

  linux下將一個(gè)進(jìn)程放到后臺(tái)運(yùn)行:

  (1)。/test &

  (2)“。/test” 之后按下 “ctrl+z” , 用“bg %num”返回的數(shù)字將該進(jìn)程放到后臺(tái);

  linux下將進(jìn)程拉回前臺(tái):

  用“fg %num”

  上面就是Linux多進(jìn)程程序調(diào)試的方法介紹了,多進(jìn)程的調(diào)試我們通常使用的是gdb,當(dāng)你在調(diào)試的時(shí)候多少都會(huì)用到gdb調(diào)試工具。

316055