gdb使用
gdb是非常強大的調試工具,在文本模式下使用。使用方法可以參考陳皓的兩篇文章
用GDB調試程序(一)
用GDB調試程序(二)
gdb常用命令在下表列出:
命令 | 描述 |
---|---|
backtrace(或bt) | 查看各級函數調用及參數 |
finish | 連續運行到當前函數返回爲止,然後停下來等待命令 |
frame(或f) | 幀編號 選擇棧幀 |
info(或i) | locals 查看當前棧幀局部變量的值 |
list(或l) | 列出源代碼,接着上次的位置往下列,每次列10行 |
list 行號 | 列出從第幾行開始的源代碼 |
list 函數名 | 列出某個函數的源代碼 |
next(或n) | 執行下一行語句 |
print(或p) | 打印表達式的值,通過表達式可以修改變量的值或者調用函數 |
quit(或q) | 退出gdb調試環境 |
set var | 修改變量的值 |
start | 開始執行程序,停在main函數第一行語句前面等待命令 |
step(或s) | 執行下一行語句,如果有函數調用則進入到函數中 |
gdb與多線程
在多線程編程時,當我們需要調試時,有時需要控制某些線程停在斷點,有些線程繼續執行。有時需要控制線程的運行順序。有時需要中斷某個線程,切換到其他線程。這些都可以通過gdb實現。
先來看一下gdb調試多線程常用命令:
-
info threads:顯示可以調試的所有線程。gdb會爲每個線程分配一個ID(和tid不同),編號一般從1開始。後面的ID是指這個ID。
-
thread ID:切換當前調試的線程爲指定ID的線程。
-
break FileName.cpp:LinuNum thread all:所有線程都在文件FileName.cpp的第LineNum行有斷點。
-
thread apply ID1 ID2 IDN command:多個線程執行gdb命令command。
-
thread apply all command:所有線程都執行command命令。
-
set scheduler-locking off|on|step:在調式某一個線程時,其他線程是否執行。off,不鎖定任何線程,默認值。on,鎖定其他線程,只有當前線程執行。step,在step(單步)時,只有被調試線程運行。
-
set non-stop on/off:當調式一個線程時,其他線程是否運行。
-
set pagination on/off:在使用backtrace時,在分頁時是否停止。
-
set target-async on/ff:同步和異步。同步,gdb在輸出提示符之前等待程序報告一些線程已經終止的信息。而異步的則是直接返回。
來看一個例子:
gdbTest.cpp。程序很簡單,只是讓兩個線程執行函數ThreadFun,在函數中打印傳入的參數。
<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <iostream></span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <pthread.h></span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>* ThreadFun(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>* arg) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> *value=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static_cast</span><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>*> (arg); <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"This is thread"</span><<*value<<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::endl; pthread_exit(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> main() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ret=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; pthread_t thread_id1,thread_id2; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>* v1=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>* v2=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>); ret = pthread_create(&thread_id1, NULL, ThreadFun, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static_cast</span><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>*>(v1)); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (ret) { <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Create pthread error!"</span><<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::endl; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } ret = pthread_create(&thread_id2, NULL, ThreadFun, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static_cast</span><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>*>(v2)); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (ret) { <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Create pthread error!"</span><<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::endl; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; } pthread_join(thread_id1, NULL); pthread_join(thread_id2, NULL); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li></ul>
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ gdb gdbThreadTest<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//調試gdbThreadTest</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
加斷點
<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">(gdb) break <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> Breakpoint <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">at</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x400a19</span>: <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">file</span> kangThread.cpp, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7.</span> (gdb) break <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35</span> Breakpoint <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">at</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x400b35</span>: <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">file</span> kangThread.cpp, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35.</span> (gdb) info break Num Type Disp Enb Address What <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">breakpoint</span> keep y <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000000400a19</span> <span class="hljs-operator" style="box-sizing: border-box;">in</span> ThreadFun(void*) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">at</span> kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">breakpoint</span> keep y <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000000400b35</span> <span class="hljs-operator" style="box-sizing: border-box;">in</span> main() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">at</span> kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
開始運行
<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">(gdb) r Starting program: /home/kang/src/mulThread/kangThread [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Traceback (most recent <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">call</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">last</span>): File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py"</span>, line <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">63</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> <<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">module</span>> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">from</span> libstdcxx.v6.printers import register_libstdcxx_printers ImportError: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">No</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">module</span> named <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libstdcxx'</span> [New Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff6fd5700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2773</span>)] [Switching <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff6fd5700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2773</span>)] Breakpoint <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, ThreadFun (arg=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x602010</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">at</span> kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> warning: Source file <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> more recent than executable. <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span>=static_cast<<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>*> (arg);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>
查看線程信息
<code class="hljs mathematica has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">(gdb) info thread [New <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Thread</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff67d4700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2774</span>)] Id Target Id <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Frame</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Thread</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff67d4700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2774</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">81</span> * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Thread</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff6fd5700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2773</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> ThreadFun (arg=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x602010</span>) at kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Thread</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff7fda780</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2769</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">81</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
可以看到ID爲2的線程執行到了斷點Breakpoint 1。可以看一下value的值
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">(gdb) n <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">std:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:cout<<<span class="hljs-string" style="box-sizing: border-box;">"This is thread"</span><<*value<<std</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:endl</span>; (gdb) p *value <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$2</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>
切換到線程3,看一下線程3執行到了哪裏
<code class="hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">(gdb) c Continuing. <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> [Switching to Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff67d4700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2774</span>)] Breakpoint <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, ThreadFun (arg=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x602030</span>) at kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> *value=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static_cast</span><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>*> (arg); (gdb) info thread Id Target Id Frame * <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff67d4700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2774</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> ThreadFun (arg=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x602030</span>) at kangThread.cpp:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff6fd5700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2773</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> __GI__dl_debug_state () at dl-debug.c:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">74</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff7fda780</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2769</span>) <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"kangThread"</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007ffff7bc566b</span> in pthread_join (threadid=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">140737337186048</span>, thread_return=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0</span>) at pthread_join.c:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">92</span> (gdb) thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> [Switching to thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> (Thread <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x7ffff67d4700</span> (LWP <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2774</span>))] <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#0 ThreadFun (arg=0x602030) at kangThread.cpp:7</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> *value=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static_cast</span><<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span>*> (arg); (gdb) n <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">cout</span><<<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"This is thread"</span><<*value<<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::endl; (gdb) p *value $<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul>
可以看出線程3的value爲2。
還有其他許多命令和方法,要在實踐中慢慢熟悉。
- 頂
- 0