精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學習啦>學習電腦>操作系統(tǒng)>Linux教程>

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

      時間: 孫勝652 分享

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

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

        (1)follow-fork-mode

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

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

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

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

        (2)attach pid

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

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

        eg:

        $./test & //使進程test在后臺運行

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

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

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

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

        $ gdb -q test

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

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

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

        sleep(1);

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

        (3)gdb wrapper

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

        linux下將一個進程放到后臺運行:

        (1)。/test &

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

        linux下將進程拉回前臺:

        用“fg %num”

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

      316055