gdb除錯多執行緒出現的死鎖

2021-07-25 22:36:42 字數 751 閱讀 6463

多執行緒的條件下,程式很容易出現死鎖,此時各個執行緒處於等待狀態,可以通過gdb除錯找到死鎖出現的地方。

例子:

#include #include #include pthread_mutex_t locka = pthread_mutex_initializer;

pthread_mutex_t lockb = pthread_mutex_initializer;

void *thread_a(void *arg)

void *thread_b(void *arg)

int main(int argc, char *argv)

編譯:gcc  -g -o deadlock deadlock.c -lpthread

執行可執行檔案,直到出現死鎖情況。

如下命令進行除錯:

1. ps aux | grep deadlock:找到該程序號

2. gdb deadlock pid: 進入程序除錯

3. generate-core-file:檢視執行緒前,儲存core檔案

4. info threads: 檢視所有執行緒

5. thread 2: 選擇進入第二個執行緒

6. bt: 檢視該執行緒呼叫的堆疊資訊

可以看到出現死鎖的位置在原始檔的35行,這樣就很順利的找到了死鎖出現的位置。

GDB除錯多執行緒及死鎖

參考文章 我在這裡總結一下 檢視正在執行的所有執行緒info threads 切換到指定執行緒thread id 這裡的id是info threads後各執行緒前面的序號 break thread test.c 123 thread all 在所有執行緒中相應的行上設定斷點 除錯死鎖流程 開啟cor...

多執行緒死鎖的原因,用GDB如何除錯

在找工作中,面試問到了這個,啥也不會,現在記錄一下 多執行緒死鎖的原因是多個執行緒同時被阻塞,它們中的乙個或全部都在等待某個資源被釋放,而該資源又被其他執行緒鎖定。產生死鎖的四個必要條件 死鎖原因 避免死鎖方法 死鎖除錯 1 g引數 1 查詢程序id,即pid ps e grep a.out 2 啟...

gdb多執行緒除錯

先介紹一下gdb多執行緒除錯的基本命令。info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id切換當前除錯的執行緒為指定id的執行緒。break thread test.c 12...