Linux gdb調(diào)試多進(jìn)程程序和多線程程序

概 述

服務(wù)端程序不可避免的會使用gdb來調(diào)試程序,有關(guān)gdb調(diào)試的基礎(chǔ)內(nèi)容,可以參考Linux gdb調(diào)試。本文介紹使用gdb調(diào)試多進(jìn)程程序和多線程程序

gdb 調(diào)試多進(jìn)程程序

1. 單獨調(diào)試子進(jìn)程
單獨調(diào)試子進(jìn)程比較簡單,通過目標(biāo)子進(jìn)程的PID,attach到gdb調(diào)試器上。

2. 使用調(diào)試器選項
gdb提供follow-fork-mode選項,在程序執(zhí)行到fork系統(tǒng)調(diào)用時,允許我們選擇繼續(xù)調(diào)試父進(jìn)程還是子進(jìn)程,用法如下:

(gdb) set follow-fork-mode mode

mode可選值如下:

  • parent:表示調(diào)試父進(jìn)程
  • child:表示調(diào)試子進(jìn)程

gdb 調(diào)試多線程程序

gdb提供了一組命令用于輔助多線程程序的調(diào)試,這里列舉常用的:

info threads
用于顯示可調(diào)式的所有線程。gdb會為每個線程分配一個ID,我們可以使用這個ID來操作對應(yīng)的線程。ID前帶有 * 號的線程是當(dāng)前被調(diào)試的線程。

thread ID
用于調(diào)試目標(biāo)ID指定的線程。

set scheduler-locking [ off|on|step ]
用于設(shè)置其他線程的執(zhí)行情況,可選值如下:

  • off:表示不鎖定任何線程,即所有線程都繼續(xù)執(zhí)行。默認(rèn)值
  • on:表示只有當(dāng)前被調(diào)試的線程會繼續(xù)執(zhí)行
  • step:表示在單步執(zhí)行時,只有當(dāng)前被調(diào)試的線程會執(zhí)行
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容