Gdb 調試多線程程序

GDB多線程調試的基本命令。

info threads 顯示當前可調試的所有線程,每個線程會有一個GDB爲其分配的ID,後面操作線程的時候會用到這個ID。 前面有*的是當前調試的線程。

thread ID 切換當前調試的線程爲指定ID的線程。

break thread_test.c:123 thread all 在所有線程中相應的行上設置斷點

thread apply ID1 ID2 command 讓一個或者多個線程執行GDB命令command。 

thread apply all command 讓所有被調試線程執行GDB命令command。

set scheduler-locking off|on|step 估計是實際使用過多線程調試的人都可以發現,在使用step或者continue命令調試當前被調試線程的時候,其他線程也是同時執行的,怎麼只讓被調試程序執行呢?通過這個命令就可以實現這個需求。off 不鎖定任何線程,也就是所有線程都執行,這是默認值。 on 只有當前被調試程序會執行。 step 在單步的時候,除了next過一個函數的情況(熟悉情況的人可能知道,這其實是一個設置斷點然後continue的行爲)以外,只有當前線程會執行。


自己幾個不太熟悉的gdb命令:

next/n number 執行下一行代碼,但是不會進入函數內部。

until number / until number ifcondition 繼續運行直到指定行號,或者函數,地址等。

where 顯示當前的行號和所處的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章