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