通過GDB non-stop mode 調(diào)試MySQL, 特別是用于復(fù)現(xiàn)死鎖場(chǎng)景, 需要按照一定的并發(fā)順序?qū)懭氩趴梢詷?gòu)造出來, 通過GDB non-stop mode 可以非常方便進(jìn)行構(gòu)造
但是用法是先開啟 GDB, 然后在 attach mysql_pid 才可以. 不能啟動(dòng)的時(shí)候就 attach 到 mysql pid
可以通過設(shè)置set non-stop on, non-stop mode 來實(shí)現(xiàn)gdb 只block 一個(gè)thread, 然后其他thread 繼續(xù)執(zhí)行的方法.
In non-stop mode, when a thread stops to report a debugging event, only that thread is stopped;
經(jīng)常需要配合這幾個(gè)一起用
set target-async 1
set pagination off
set non-stop on
這一行可以直接啟動(dòng)的時(shí)候就設(shè)置好
gdb —quiet -ex ‘set pagination off’ -ex ‘set target-async on’ -ex ‘set non-stop on’
在 non-stop mode 里面, 如果斷點(diǎn)被某一個(gè)線程命中, 那么只有該線程是停止的, 其他線程繼續(xù) running.. 上圖可以看到只有 Thread 66 是停止的, 其他 Thread 都在運(yùn)行鐘.
在 non-stop mode 中, 如果想讓其他所有 Thread 繼續(xù)運(yùn)行, 需要執(zhí)行 c -a(continue -a), 如果只是執(zhí)行 c(continue), 那么只有當(dāng)前 thread 運(yùn)行.
通過 continue 只運(yùn)行當(dāng)前 Thread, 就可以切換 Thread, 執(zhí)行 continue, 做到多個(gè) Thread 輪流運(yùn)行的效果, 用于復(fù)雜場(chǎng)景復(fù)現(xiàn).
比如這個(gè) example 把斷點(diǎn)打在 do_command 上面, 那么就兩個(gè) client 連接進(jìn)來執(zhí)行 命令以后, 都停止在了 do_command 上, 這個(gè)時(shí)候可以按照我們的需求去執(zhí)行哪一個(gè) thread.
比如我這里又增加了一個(gè) breakpoint lock_rec_lock, 我想讓 Thread 66 先執(zhí)行, 那么我就t 66, 然后在這里執(zhí)行 continue, 那么就會(huì)發(fā)現(xiàn) t 66 跳到下一個(gè)斷點(diǎn).
這個(gè)時(shí)候可以再切到 Thread 67 讓他去執(zhí)行, 因?yàn)?Thread 66 已經(jīng)斷在一個(gè)地方了. 這個(gè)時(shí)候我們直接讓 Thread 67 執(zhí)行完成就變成這樣
可以看到 Thread 66 還停在這里, 但是 Thread 67 已經(jīng)執(zhí)行結(jié)束了.
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1383瀏覽量
40434 -
調(diào)試
+關(guān)注
關(guān)注
7文章
589瀏覽量
34072 -
MySQL
+關(guān)注
關(guān)注
1文章
830瀏覽量
26753
原文標(biāo)題:通過GDB non-stop mode 調(diào)試MySQL
文章出處:【微信號(hào):inf_storage,微信公眾號(hào):數(shù)據(jù)庫和存儲(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
QEMU+GDB調(diào)試ARM程序
使用GDB調(diào)試Linux應(yīng)用程序
gdb調(diào)試器解析
GDB調(diào)試命令總結(jié)
使用 GDB 調(diào)試多進(jìn)程程序
Linux應(yīng)用的GDB調(diào)試的原理及過程分析
![Linux應(yīng)用的<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>的原理及過程分析](https://file.elecfans.com/web1/M00/B5/54/pIYBAF5gWW-ARv_SAABcEAzxVmk577.png)
嵌入式Linux GDB調(diào)試環(huán)境搭建與使用
![嵌入式Linux <b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>環(huán)境搭建與使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Linux嵌入式 gdb VSCode圖形化調(diào)試教程
![Linux嵌入式 <b class='flag-5'>gdb</b> VSCode圖形化<b class='flag-5'>調(diào)試</b>教程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
OpenHarmony系統(tǒng)使用gdb調(diào)試init
ARM平臺(tái)如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?
![ARM平臺(tái)如何玩轉(zhuǎn)<b class='flag-5'>GDB</b>遠(yuǎn)程<b class='flag-5'>調(diào)試</b>?](https://file.elecfans.com/web2/M00/16/43/poYBAGFSePaALvBiAAA4prW2430321.jpg)
在ubuntu中調(diào)試GDB
![在ubuntu中<b class='flag-5'>調(diào)試</b><b class='flag-5'>GDB</b>](https://file1.elecfans.com/web2/M00/8D/FD/wKgaomTCKxCAGEqwAAAJmUuGa5Q744.jpg)
GDB調(diào)試工具的原理
![<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具的原理](https://file1.elecfans.com/web2/M00/AD/44/wKgaomVMntmARfX1AAA0QpsI-74694.jpg)
如何使用GDB調(diào)試工具
![如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具](https://file1.elecfans.com/web2/M00/AD/44/wKgaomVMoQ-ALIZ1AAG9PSG5F_o447.jpg)
評(píng)論