gdb除錯多執行緒

2021-08-30 06:13:15 字數 1400 閱讀 9134

gdb提供了以下供除錯多執行緒的程序的功能:

info threads 乙個用來查詢現存執行緒的命令。

注意:這些特性不是在所有gdb版本都能使用,歸根結底要看作業系統是否支援。

如果你的gdb不支援這些命令,會顯示出錯資訊:

(gdb) info threads

(gdb) thread 1

thread id 1 not known. use the \ "info threads\ " command to

see the ids of currently known threads.

gdb的執行緒級除錯功能允許你觀察你程式執行中所有的執行緒,但無論什麼時候

gdb控制,總有乙個「當前」執行緒。除錯命令對「當前」程序起作用。

一旦gdb發現了你程式中的乙個新的執行緒,它會自動顯示有關此執行緒的系統信

息。比如:

[new process 35 thread 27]

不過格式和作業系統有關。

為了除錯的目的,gdb自己設定執行緒號。

info threads

顯示程序中所有的執行緒的概要資訊。gdb按順序顯示:

1.執行緒號(gdb設定)

2.目標系統的執行緒標識。

3.此執行緒的當前堆疊。

一前面打*的執行緒表示是當前執行緒。

例如:

(gdb) info threads

3 process 35 thread 27 0x34e5 in sigpause ()

2 process 35 thread 23 0x34e5 in sigpause ()

* 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8)

at threadtest.c:68

thread threadno

把執行緒號為threadno的執行緒設為當前執行緒。命令列引數threadno是gdb內定的

執行緒號。你可以用info threads命令來檢視gdb內設定的執行緒號。gdb顯示該執行緒

的系統定義的標識號和執行緒對應的堆疊。比如:

(gdb) thread 2

[switching to process 35 thread 23]

0x34e5 in sigpause ()

switching後的內容取決於你的作業系統對執行緒標識的定義。

此命令讓你對乙個以上的執行緒發出相同的命令args,[threadno]的含義同上。

如果你要向你程序中的所有的執行緒發出命令使用[all]選項。

無論gdb何時中斷了你的程式(因為乙個斷點或是乙個訊號),它自動選擇訊號或

斷點發生的執行緒為當前執行緒。gdb將用乙個格式為[switching to systag]的訊息來向你報告。

gdb多執行緒除錯

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

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...