Linux下用GDB多線程調試

調試多線程的相關指令

顯示所有進程

info threads
這條指令顯示可以調試的所有線程,gdb會爲每個線程分配一個ID,這個ID和線程ID不同,ID號一般從1開始。

切換線程指令

爲什麼要切換線程呢?因爲gdb默認在調試多線程程序時只跟蹤主線程,而新創建的線程都阻塞在線程創建函數pthread_create處。如果我們不切換,那麼我們就無法調試我們在主線程中所創建的線程。
	thread ID
這條指令用來切換當前調試的線程爲指定的ID號的線程,ID爲GDB爲線程所分配的ID.

多個線程控制指令

//指定多個線程執行command指令,其中command爲gdb中的指令
thread apply ID1 ID2 ...IDn command   
//指定所有線程執行command指令,其中command爲gdb中的指令
thread apply all command

設置線程調試狀態指令

線程鎖

//線程鎖
  set scheduler-locking off|on
off:不鎖定任何線程,當程序繼續運行的時候如果有斷點,那麼就把所有的線程都暫停下來,直到你指定某個線程繼續執行,如果在當前線程下使用continue的話那麼會啓動所有線程(GDB默認); 
on:打開線程鎖,鎖定其他線程,只有當前線程執行。

non-stop模式
爲了對上面的這種一個線程中斷在一個斷點上,其他所有的線程都會被freeze. gdb v7.0引入了non-stop模式,在這個模式下: 
1. 當某個或多個線程在一個斷點上,其他線程仍會並行運行 
2. 你可以選擇某個被中斷的線程,只讓他運行。 
3. non-stop模式表示不停止模式,除了斷點有關的進程會被停下來,其他線程會繼續執行。 
設置non-stop模式,打開gdb後,在開始r之前,首先連續輸入下面的指令

set target-async 1
set pagination off
set non-stop on

參考文章鏈接:https://blog.csdn.net/bit_clearoff/article/details/59596419

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