1. 程式人生 > >如何使用GDB調試多線程

如何使用GDB調試多線程

tex color avi ref weight 調式 mark gcc編譯 div

先寫一段多線程程序。
技術分享

makefile 技術分享
加上 -g參數生成可調式信息, 可以進行調試。
pthread不是Linux下的默認的庫,也就是在鏈接的時候,無法找到phread庫中哥函數的入口地址,於是鏈接會失敗。在gcc編譯的時候,附加要加 -lpthread參數即可解決。

  • gdb test 進入調試

技術分享

  • 需要調試的地方打下斷點,run運行到斷點處。

技術分享

  • r 運行到斷點處,info thread可以查看被調試的線程。

技術分享

  • thread apply all bt 讓所有線程打印堆棧信息
    技術分享

set scheduler-locking off|on|step
在使用step或continue命令調試當前被調試線程的時候,其他線程也是同時執行的,如果我們只想要被調試的線程執行,而其他線程停止等待,那就要鎖定要調試的線程,只讓它運行。

off:不鎖定任何線程,所有線程都執行。

on:只有當前被調試的線程會執行。

step:阻止其他線程在當前線程單步調試的時候搶占當前線程。只有當next、continue、util以及finish的時候,其他線程才會獲得重新運行的。
show scheduler-locking:
這條命令是為了查看當前鎖定線程的模式。

如何使用GDB調試多線程