国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

使用gdb調試多線程程序總結

2024-06-28 13:24:43
字體:
來源:轉載
供稿:網友
使用gdb調試多線程程序總結轉:使用gdb調試多線程程序總結

  一直對GDB多線程調試接觸不多,最近因為工作有了一些接觸,簡單作點記錄吧。 先介紹一下GDB多線程調試的基本命令。 info threads 顯示當前可調試的所有線程,每個線程會有一個GDB為其分配的ID,后面操作線程的時候會用到這個ID。 前面有*的是當前調試的線程。 thread ID 切換當前調試的線程為指定ID的線程。 break thread_test.c:123 thread all在所有線程中相應的行上設置斷點thread apply ID1 ID2 command 讓一個或者多個線程執行GDB命令command。 thread apply all command 讓所有被調試線程執行GDB命令command。 set scheduler-locking off|on|step 估計是實際使用過多線程調試的人都可以發現,在使用step或者continue命令調試當前被調試線程的時候,其他線程也是同時執行的,怎么只讓被調試程序執行呢?通過這個命令就可以實現這個需求。off 不鎖定任何線程,也就是所有線程都執行,這是默認值。 on 只有當前被調試程序會執行。 step 在單步的時候,除了next過一個函數的情況(熟悉情況的人可能知道,這其實是一個設置斷點然后continue的行為)以外,只有當前線程會執行。

gdb對于多線程程序的調試有如下的支持:

  • 線程產生通知:在產生新的線程時, 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)]

  • 查看線程:使用info threads可以查看運行的線程。

(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分配的線程號,對線程進行切換時,使用該該號碼,而不是上文標出的綠色數字。

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

  • 切換線程:使用 thread THREADNUMBER 進行切換,THREADNUMBER 為上文提到的線程號。下例顯示將活動線程從 1 切換至 4。

(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)

以上即為使用gdb提供的對多線程進行調試的一些基本命令。另外,gdb也提供對線程的斷點設置以及對指定或所有線程發布命令的命令。

初次接觸gdb下多線程的調試,往往會忽視gdb中活動線程的概念。一般來講,在使用gdb調試的時候,只有一個線程為活動線程,如果希望得到其他的線程的輸出結果,必須使用thread命令切換至指定的線程,才能對該線程進行調試或觀察輸出結果。

gdb調試主要命令:用GDB調試程序

         GDB命令手冊


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邓州市| 昌邑市| 尚义县| 江达县| 乾安县| 潢川县| 搜索| 阳西县| 勐海县| 乌拉特后旗| 綦江县| 玛沁县| 白银市| 盐池县| 中西区| 峨眉山市| 武邑县| 青铜峡市| 盐亭县| 乳山市| 盈江县| 衡南县| 宁陕县| 临泽县| 保山市| 富锦市| 黄平县| 乌什县| 房产| 萝北县| 高平市| 永仁县| 邵武市| 新巴尔虎右旗| 攀枝花市| 玉环县| 宁化县| 仪陇县| 宜阳县| 凤山县| 上栗县|