版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、set target-async 1set pagination offset non-stop oninfo 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。 thre
2、ad 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)然后conti
3、nue的行為)以外,只有當(dāng)前線程會(huì)執(zhí)行。 作者:破砂鍋 開源的GDB被廣泛使用在Linux、OSX、Unix和各種嵌入式系統(tǒng)(例如手機(jī)),這次它又帶給我們一個(gè)驚喜。 多線程調(diào)試之痛 調(diào)試器(如VS2008和老版GDB)往往只支持all-stop模式,調(diào)試多線程程序時(shí),如果某個(gè)線程斷在一個(gè)斷點(diǎn)上,你的調(diào)試器會(huì)讓整個(gè)程序freeze,直到你continue這個(gè)線程,程序中的其他線程才會(huì)繼續(xù)運(yùn)行。這個(gè)限制使得被調(diào)試的程序不能夠像真實(shí)環(huán)境中那樣運(yùn)行-當(dāng)某個(gè)線程斷在一個(gè)斷點(diǎn)上,讓其他線程并行運(yùn)行。GDBv7.0引入的non-stop模式使得這個(gè)問(wèn)題迎刃而解。在這個(gè)模式下,· 當(dāng)某個(gè)或
4、多個(gè)線程斷在一個(gè)斷點(diǎn)上,其他線程仍會(huì)并行運(yùn)行 · 你可以選擇某個(gè)被斷的線程,并讓它繼續(xù)運(yùn)行 讓我們想象一下,有了這個(gè)功能后· 當(dāng)其他線程斷在斷點(diǎn)上時(shí),程序里的定時(shí)器線程可以正常的運(yùn)行了,從而避免不必要得超時(shí) · 當(dāng)其他線程斷在斷點(diǎn)上時(shí),程序里的watchdog線程可以正常的運(yùn)行了,從而避免嵌入式硬件以為系統(tǒng)崩潰而重啟 · 可以控制多個(gè)線程運(yùn)行的順序,從而重現(xiàn)deadlock場(chǎng)景了。由于GDB可以用python腳本驅(qū)動(dòng)調(diào)試,理論上可以對(duì)程序在不同的線程運(yùn)行順序下進(jìn)行自動(dòng)化測(cè)試。因此,non-stop模式理所當(dāng)然成為多線程調(diào)試“必殺技”。這200
5、9年下半年之后發(fā)布的Linux版本里都帶有GDBv7.0之后的版本。很好奇,不知道VS2010里是不是也支持類似的調(diào)試模式了。演示GDB的non-stop模式 讓破砂鍋用一個(gè)C+小程序在Ubuntu Linux 09.10下demo這個(gè)必殺技。雖然我的demo使用命令行版gdb,如果你喜歡圖形化的調(diào)試器,Eclipse2009年5月之后的版本可以輕松的調(diào) 用這個(gè)功能,詳情參見Eclipse參見/node/723 1. 編譯以下程序nonstop 1 / gdb non-st
6、op mode demo 2 / build instruction: g+ -g -o nonstop nonstop.cpp -lboost_thread 3 4 #include <iostream> 5 #include <boost/thread/thread.hpp> 6 7 struct op 8
7、 9 op(int id): m_id(id) 10 11 void operator()()12 13
8、; std:cout << m_id << " begin" << std:endl;14 std:cout << m_id <&
9、lt; " end" << std:endl;15 16 17 int m_id;18 19 20 int main(int argc, char * argv)21 22
10、; boost:thread t1(op(1), t2(op(2), t3(op(3);23 t1.join(); t2.join(); t3.join();24 return 0;25 26 2. 把一下3行添加到/.gdb
11、init來(lái)打開non-stop模式 set target-async 1set pagination offset non-stop on 3. 啟動(dòng)gdb,設(shè)斷點(diǎn),運(yùn)行.可以看到主線程1是running,3個(gè)子線程都斷在斷點(diǎn)上,而不是只有一個(gè)子線程斷在斷點(diǎn)上./devroot/nonstop$ gdb ./nonstopGNU gdb (GDB) 7.0-ubuntuReading symbols from /home/frankwu/devr
12、oot/nonstop/nonstop.done.(gdb) break 14Breakpoint 1 at 0x402058: file nonstop.cpp, line 14.(gdb) break 24Breakpoint 3 at 0x401805: file nonstop.cpp, line 24.(gdb) runStarting program: /home/frank
13、wu/devroot/nonstop/nonstopThread debugging using libthread_db enabledNew Thread 0x7ffff6c89910 (LWP 2762)New Thread 0x7ffff6488910 (LWP 2763)1 beginBreakpoint 1, op:operator() (this=0x605118) at nonstop.cpp:141
14、4 std:cout << m_id << " end" << std:endl;2 beginBreakpoint 1, op:operator() (this=0x605388) at nonst
15、op.cpp:1414 std:cout << m_id << " end" << std:endl;New Thread 0x7ffff5c87910 (LWP 2764)3 beginBreakpoint&
16、#160;1, op:operator() (this=0x605618) at nonstop.cpp:1414 std:cout << m_id << " end" << std:endl;(gdb) in
17、fo threads 4 Thread 0x7ffff5c87910 (LWP 2764) op:operator() (this=0x605618) at nonstop.cpp:14 3 Thread 0x7ffff6488910 (LWP 2763) op:operator() (this=0x605388) at nonstop.cpp:14
18、; 2 Thread 0x7ffff6c89910 (LWP 2762) op:operator() (this=0x605118) at nonstop.cpp:14* 1 Thread 0x7ffff7fe3710 (LWP 2759) (running)4. 讓線程3繼續(xù)運(yùn)行,注意我顧意把主線程1也continue,這是我發(fā)現(xiàn)的workaround,否則gdb不能切回thread 1.(gdb) threa
19、d apply 3 1 continueThread 3 (Thread 0x7ffff6488910 (LWP 2763):Continuing.Thread 1 (Thread 0x7ffff7fe3710 (LWP 2759):Continuing.Cannot execute this command while the selected thread is
20、running.2 endThread 0x7ffff6488910 (LWP 2763) exitedwarning: Unknown thread 3.Thread 1 (Thread 0x7ffff7fe3710 (LWP 2759):Continuing.Cannot execute this command while the selected thread is r
21、unning.(gdb) info threads 4 Thread 0x7ffff5c87910 (LWP 2764) op:operator() (this=0x605618) at nonstop.cpp:14 2 Thread 0x7ffff6c89910 (LWP 2762) op:operator() (this=0x605118) at
22、;nonstop.cpp:14* 1 Thread 0x7ffff7fe3710 (LWP 2759) (running)5. 讓另外兩個(gè)線程繼續(xù)運(yùn)行而結(jié)束,主線程斷在第24行,最后結(jié)束.(gdb) thread apply 4 2 1 continueThread 4 (Thread 0x7ffff5c87910 (LWP 2764):Continuing.Thread 2 (Thread 0x7ffff6c89910 (LWP 2762):Continuin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年物業(yè)管理年終工作總結(jié)范文(31篇)
- 《肺栓塞的CTA表現(xiàn)》課件
- 劃拔房改房合同(2篇)
- Unit1People of Achievement(詞匯短語(yǔ)句式)-2025屆高三人教版英語(yǔ)一輪復(fù)習(xí)闖關(guān)攻略(解析版)
- 第8課 第一次世界大戰(zhàn)(分層作業(yè))(解析版)
- 廣西龍勝縣重點(diǎn)達(dá)標(biāo)名校2025屆中考生物最后沖刺模擬試卷含解析
- 2024年度四川省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師綜合檢測(cè)試卷A卷含答案
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師典型題匯編及答案
- 2025年玻璃鋼纖維制品項(xiàng)目可行性研究報(bào)告
- 種豬養(yǎng)殖場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2024秋期國(guó)家開放大學(xué)??啤斗勺稍兣c調(diào)解》一平臺(tái)在線形考(形考任務(wù)1至4)試題及答案
- 七年級(jí)全冊(cè)語(yǔ)文古詩(shī)詞
- 銷售業(yè)務(wù)拓展外包協(xié)議模板2024版版
- 2024軟件維護(hù)合同范本
- 2022-2023學(xué)年北京市海淀區(qū)七年級(jí)上學(xué)期期末語(yǔ)文試卷(含答案解析)
- 汽車尾氣排放治理作業(yè)指導(dǎo)書
- 人教版初中美術(shù)八年級(jí)上冊(cè) 第一單元 第1課 造型的表現(xiàn)力 教案
- 云南省師范大學(xué)附屬中學(xué)2025屆高二生物第一學(xué)期期末聯(lián)考試題含解析
- 人教部編版初中八年級(jí)生物上冊(cè)知識(shí)梳理
- 預(yù)應(yīng)力錨索加固監(jiān)理實(shí)施細(xì)則
- 中職2024-2025學(xué)年高一上學(xué)期期末語(yǔ)文試題06(解析版)
評(píng)論
0/150
提交評(píng)論