日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

gdb多线程调试1

發(fā)布時(shí)間:2024/9/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb多线程调试1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

gdb對(duì)于多線程程序的調(diào)試有如下的支持:

  • 線程產(chǎn)生通知:在產(chǎn)生新的線程時(shí), gdb會(huì)給出提示信息

(gdb) r
Starting program: /root/thread?
[New Thread 1073951360 (LWP 12900)]?
[New Thread 1082342592 (LWP 12907)]---以下三個(gè)為新產(chǎn)生的線程
[New Thread 1090731072 (LWP 12908)]
[New Thread 1099119552 (LWP 12909)]

  • 查看線程:使用info threads可以查看運(yùn)行的線程。

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

注意,行首的藍(lán)色文字為gdb分配的線程號(hào),對(duì)線程進(jìn)行切換時(shí),使用該該號(hào)碼,而不是上文標(biāo)出的綠色數(shù)字。

另外,行首的紅色星號(hào)標(biāo)識(shí)了當(dāng)前活動(dòng)的線程

  • 切換線程:使用?thread THREADNUMBER?進(jìn)行切換,THREADNUMBER?為上文提到的線程號(hào)。下例顯示將活動(dòng)線程從 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提供的對(duì)多線程進(jìn)行調(diào)試的一些基本命令。另外,gdb也提供對(duì)線程的斷點(diǎn)設(shè)置以及對(duì)指定或所有線程發(fā)布命令的命令。

????? 初次接觸gdb下多線程的調(diào)試,往往會(huì)忽視gdb中活動(dòng)線程的概念。一般來(lái)講,在使用gdb調(diào)試的時(shí)候,只有一個(gè)線程為活動(dòng)線程,如果希望得到其他的線程的輸出結(jié)果,必須使用thread命令切換至指定的線程,才能對(duì)該線程進(jìn)行調(diào)試或觀察輸出結(jié)果。

http://hi.baidu.com/hcq11/blog/item/9f5bfc6e696209d680cb4a25.html

總結(jié)

以上是生活随笔為你收集整理的gdb多线程调试1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。