青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

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多線程調試的實現思路。

比較主要的代碼是thread.c,前面介紹的幾個命令等都是在其中實現。
thread_list這個表存儲了當前可調試的所有線程的信息。
函數add_thread_silent或者add_thread(不同版本GDB不同)用來向thread_list列表增加一個線程的信息。
函數delete_thread用來向thread_list列表刪除一個線程的信息。
上面提到的這2個函數會被有線程支持的target調用,用來增加和刪除線程,不同的OS對線程的實現差異很大,這么實現比較好的保證了GDB多線程調試支持的擴展性。
函數info_threads_command是被命令info threads調用的,就是顯示thread_list列表的信息。
函數thread_command是被命令thread調用,切換當前線程最終調用的函數是switch_to_thread,這個函數會先將當前調試線程變量inferior_ptid,然后對寄存器和frame緩沖進行刷新。
函數thread_apply_command被命令thread apply調用,這個函數的實際實現其實很簡單,就是先切換當前線為指定線程,然后調用函數execute_command調用指定函數。

比較特別的是set scheduler-locking沒有實現在thread.c中,而是實現在控制被調試程序執行的文件infrun.c中。
對 其的設置會保存到變量scheduler_mode中,而實際使用這個變量的函數只有用來令被調試程序執行的函數resume。在默認情況下, 傳遞給target_resume的變量是resume_ptid,默認情況下其的值為RESUME_ALL,也就是告訴target程序執行的時候所有 被調試線程都要被執行。而當scheduler_mode設置為只讓當前線程執行的時候,resume_ptid將被設置為inferior_ptid, 這就告訴target只有inferior_ptid的線程會被執行。

最后特別介紹一下Linux下多線程的支持,基本的調試功能在linux-nat.c中,這里有對Linux輕量級別進程本地調試的支持。但是其 在調試多線程程序的時候,還需要對pthread調試的支持,這個功能實現在linux-thread-db.c中。對pthread的調試要通過調用 libthread_db庫來支持。
這里有一個單獨的target"multi-thread",這個target有2點很特別:
第 一,一般target的裝載是在調用相關to_open函數的時候調用push_target進行裝載。而這個target則不同,在其初始化 的時候,就注冊了函數thread_db_new_objfile到庫文件attach事件中。這樣當GDB為調試程序的動態加載庫時候attach庫文 件的時候,就會調用這個函數thread_db_new_objfile。這樣當GDB裝載libpthread庫的時候,最終會裝載 target"multi-thread"。
第二,這個target并沒有像大部分target那樣自己實現了全部調試功能,其配合linux-nat.c的代碼的功能,這里有一個target多層結構的設計,要介紹的比較多,就不詳細介紹了。


最后介紹一下我最近遇見的一個多線程調試和解決。

基本問題是在一個Linux環境中,調試多線程程序不正常,info threads看不到多線程的信息。
我先用命令 maintenance print target-stack看了一下target的裝載情況,發現target"multi-thread"沒有被裝載,用GDB對GDB進行調試,發現在 函數check_for_thread_db在調用libthread_db中的函數td_ta_new的時候,返回了TD_NOLIBTHREAD,所 以沒有裝載target"multi-thread"。
在時候我就懷疑是不是libpthread有問題,于是檢查了一下發現了問題,這個環 境中的libpthread是被strip過的,我想可能 就是以為這個影響了td_ta_new對libpthread符號信息的獲取。當我換了一個沒有strip過的libpthread的時候,問題果然解決 了。
最終我的解決辦法是拷貝了一個.debug版本的libpthread到lib目錄中,問題解決了。  多線程如果dump,多為段錯誤,一般都涉及內存非法讀寫。可以這樣處理,使用下面的命令打開系統開關,讓其可以在死掉的時候生成core文件。  
ulimit -c unlimited
這樣的話死掉的時候就可以在當前目錄看到core.pid(pid為進程號)的文件。接著使用gdb:
gdb ./bin ./core.pid
進去后,使用bt查看死掉時棧的情況,在使用frame命令。

還有就是里面某個線程停住,也沒死,這種情況一般就是死鎖或者涉及消息接受的超時問題(聽人說的,沒有遇到過)。遇到這種情況,可以使用:
gcore pid (調試進程的pid號)
手動生成core文件,在使用pstack(linux下好像不好使)查看堆棧的情況。如果都看不出來,就仔細查看代碼,看看是不是在if,return,break,continue這種語句操作是忘記解鎖,還有嵌套鎖的問題,都需要分析清楚了。


from:

http://blog.chinaunix.net/u3/91335/showart.php?id=2249238

posted on 2010-08-20 17:16 chatler 閱讀(593) 評論(0)  編輯 收藏 引用 所屬分類: Linux_Coding
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美精品久久| 久久精品国产一区二区三区免费看 | 欧美美女bbbb| 一本色道久久综合亚洲精品婷婷| 亚洲第一在线综合网站| 欧美一区二区在线观看| 久久精品九九| 欧美搞黄网站| 亚洲三级国产| 亚洲一区日本| 久久久久一区二区三区| 免费在线观看日韩欧美| 欧美午夜精品久久久| 国产一区观看| 亚洲精品欧美日韩| 午夜精品影院在线观看| 米奇777在线欧美播放| 亚洲看片免费| 久久久久免费视频| 欧美午夜寂寞影院| 亚洲国产一区二区视频| 亚洲欧美在线看| 欧美激情国产日韩| 欧美日韩国产综合视频在线| 久久高清福利视频| 亚洲激情欧美激情| 亚洲免费人成在线视频观看| 久久夜色精品国产噜噜av| 欧美午夜剧场| 亚洲黄色毛片| 久久久青草婷婷精品综合日韩| 亚洲欧洲日本专区| 久久久久久久成人| 国产美女在线精品免费观看| 亚洲国产精品成人综合色在线婷婷 | 亚洲国产日韩一区| 欧美一级久久| 国产精品国产精品| 亚洲精品国产欧美| 久久亚洲综合色| 久久久久久**毛片大全| 亚洲网站在线播放| 久久精品视频免费| 亚洲人成网站影音先锋播放| 亚洲尤物在线| 亚洲国产精品悠悠久久琪琪| 欧美在线视频一区二区| 国产综合久久| 最新国产精品拍自在线播放| 麻豆九一精品爱看视频在线观看免费| 亚洲国产综合在线| 麻豆av一区二区三区| 国产欧美日韩不卡免费| 亚洲一级黄色片| 日韩视频一区二区三区在线播放免费观看 | 欧美啪啪一区| 91久久精品国产91久久| 麻豆精品在线播放| 久久久精品动漫| 樱桃成人精品视频在线播放| 欧美尤物一区| 欧美在线不卡| 伊人男人综合视频网| 蜜桃av久久久亚洲精品| 久久麻豆一区二区| 91久久精品一区| 亚洲国产精品久久91精品| 欧美国产91| 亚洲婷婷综合久久一本伊一区| 亚洲精品社区| 国产精品久久久久影院色老大| 一卡二卡3卡四卡高清精品视频| 欧美一区二区三区四区视频| 午夜欧美大片免费观看| 影音先锋久久精品| 亚洲福利专区| 欧美色图五月天| 久久精品国产精品亚洲精品| 久久久噜噜噜久久中文字免| 亚洲黄一区二区| 日韩亚洲欧美成人| 国产欧美一区二区三区在线看蜜臀| 久久人人爽爽爽人久久久| 亚洲欧洲综合另类| 欧美揉bbbbb揉bbbbb| 欧美一区2区三区4区公司二百| 亚洲欧美三级在线| 一区视频在线| 亚洲免费高清视频| 国产视频观看一区| 欧美激情在线观看| 国产精品草草| 女人色偷偷aa久久天堂| 欧美日韩亚洲天堂| 久久综合色8888| 欧美激情一二三区| 久久精品人人做人人综合| 欧美国产日韩一区二区| 欧美一区二区视频97| 麻豆av一区二区三区| 亚洲欧美春色| 欧美二区视频| 久久久久久免费| 国产精品不卡在线| 欧美日韩免费区域视频在线观看| 欧美在线视频网站| 中文一区在线| 老色鬼精品视频在线观看播放| 亚洲欧美中文日韩在线| 欧美电影免费观看高清完整版| 久久精品九九| 国产精品美女久久久久久免费| 欧美国产亚洲精品久久久8v| 国产性天天综合网| 亚洲亚洲精品三区日韩精品在线视频| 亚洲国产精品成人一区二区 | 美日韩精品免费观看视频| 午夜一区在线| 欧美日韩亚洲网| 欧美成年人视频网站| 国产日韩精品一区二区三区在线| 亚洲免费高清视频| 亚洲美女淫视频| 狼人社综合社区| 欧美成人黄色小视频| 红桃视频成人| 欧美一区二区三区视频在线观看| 亚洲自拍偷拍网址| 国产精品久久久久av| 一本久道久久综合狠狠爱| 亚洲精品亚洲人成人网| 蜜臀久久久99精品久久久久久 | 亚洲一区国产视频| 亚洲欧美日韩一区二区三区在线观看 | 午夜伦理片一区| 亚洲精选一区二区| 久久综合九色综合久99| 久久精品国产精品亚洲| 国产精品私拍pans大尺度在线 | 美女视频黄免费的久久| 欧美大片在线影院| 亚洲人成小说网站色在线| 欧美va天堂va视频va在线| 欧美成人免费在线| 亚洲精品免费网站| 欧美精品久久99| 99在线热播精品免费| 亚洲与欧洲av电影| 国产欧美精品一区二区三区介绍 | 欧美精品 日韩| 亚洲免费观看高清完整版在线观看| 亚洲日本理论电影| 欧美三级免费| 午夜视频久久久| 欧美大尺度在线| 一区二区国产精品| 国产精品一香蕉国产线看观看| 欧美一区二区免费视频| 亚洲欧美一区二区原创| 国产精品超碰97尤物18| 亚洲欧美一区在线| 欧美激情1区2区3区| 一本综合精品| 国产精品―色哟哟| 久久午夜激情| 一本色道久久综合狠狠躁篇的优点| 欧美亚洲尤物久久| 亚洲高清久久久| 欧美性视频网站| 久久久久成人精品| 99精品视频免费| 久久蜜桃av一区精品变态类天堂| 亚洲精品欧美| 国产嫩草影院久久久久 | 国产精品美腿一区在线看| 久久狠狠一本精品综合网| 欧美成人激情视频| 亚洲欧美在线一区| 亚洲片在线观看| 国产日韩欧美在线一区| 欧美精品一区二区久久婷婷| 午夜视频在线观看一区二区| 亚洲国产精品成人综合| 亚洲精品美女91| 激情五月婷婷综合| 国产精品乱人伦一区二区| 免费亚洲网站| 久久久久久9999| 亚洲欧美影院| 一卡二卡3卡四卡高清精品视频| 男同欧美伦乱| 午夜国产精品视频| 一区二区三区视频免费在线观看| 在线观看视频一区| 国产亚洲欧洲| 国产美女精品免费电影| 久久精品国亚洲| 性欧美精品高清| 亚洲视频自拍偷拍| 亚洲精品一区在线|