gdb多執行緒除錯

2021-06-06 02:45:35 字數 2045 閱讀 7716

先介紹一下gdb多執行緒除錯的基本命令。

info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。 前面有*的是當前除錯的執行緒。

thread id切換當前除錯的執行緒為指定id的執行緒。

break thread_test.c:123 thread all在所有執行緒中相應的行上設定斷點

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

gdb對於多執行緒程式的除錯有如下的支援:

(gdb) r

starting program: /root/thread

[new thread 1073951360 (lwp 12900)]

[new thread 1082342592 (lwp 12907)]---以下三個為新產生的執行緒

[new thread 1090731072 (lwp 12908)]

[new thread 1099119552 (lwp 12909)]

(gdb) info threads

4 thread 1099119552 (lwp 12940)   0xffffe002 in ?? ()

3 thread 1090731072 (lwp 12939)   0xffffe002 in ?? ()

2 thread 1082342592 (lwp 12938)   0xffffe002 in ?? ()

* 1 thread 1073951360 (lwp 12931)   main (argc=1, argv=0xbfffda04) at thread.c:21

(gdb)

注意,行首的藍色文字為gdb分配的執行緒號,對執行緒進行切換時,使用該該號碼,而不是上文標出的綠色數字。

另外,行首的紅色星號標識了當前活動的執行緒

(gdb) info threads

4 thread 1099119552 (lwp 12940)   0xffffe002 in ?? ()

3 thread 1090731072 (lwp 12939)   0xffffe002 in ?? ()

2 thread 1082342592 (lwp 12938)   0xffffe002 in ?? ()

* 1 thread 1073951360 (lwp 12931)   main (argc=1, argv=0xbfffda04) at thread.c:21

(gdb) thread 4

[switching to thread 4 (thread 1099119552 (lwp 12940))]#0   0xffffe002 in ?? ()

(gdb) info threads

* 4 thread 1099119552 (lwp 12940)   0xffffe002 in ?? ()

3 thread 1090731072 (lwp 12939)   0xffffe002 in ?? ()

2 thread 1082342592 (lwp 12938)   0xffffe002 in ?? ()

1 thread 1073951360 (lwp 12931)   main (argc=1, argv=0xbfffda04) at thread.c:21

(gdb)

後面就是直接在你的執行緒函式裡面設定斷點,然後continue到那個斷點,一般情況下多執行緒的時候,由於是同時執行的,最好設定set scheduler-locking on

這樣的話,只除錯當前執行緒 

gdb 除錯多執行緒

設定core環境 uname a 檢視機器引數 ulimit a 檢視預設引數 ulimit c 1024 設定core檔案大小為1024 ulimit c unlimit 設定core檔案大小為無限 多執行緒如果dump,多為段錯誤,一般都涉及記憶體非法讀寫。可以這樣處理,使用下面的命令開啟系統開...

gdb 多執行緒除錯

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

GDB 多執行緒除錯

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