通過GDB non-stop mode 調(diào)試MySQL, 特別是用于復(fù)現(xiàn)死鎖場景, 需要按照一定的并發(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ù)雜場景復(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文章
1408瀏覽量
41089 -
調(diào)試
+關(guān)注
關(guān)注
7文章
604瀏覽量
34513 -
MySQL
+關(guān)注
關(guān)注
1文章
849瀏覽量
27513
原文標(biāo)題:通過GDB non-stop mode 調(diào)試MySQL
文章出處:【微信號:inf_storage,微信公眾號:數(shù)據(jù)庫和存儲(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
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 GDB調(diào)試環(huán)境搭建與使用

Linux嵌入式 gdb VSCode圖形化調(diào)試教程

OpenHarmony系統(tǒng)使用gdb調(diào)試init
ARM平臺(tái)如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試?

在ubuntu中調(diào)試GDB

GDB調(diào)試工具的原理

如何使用GDB調(diào)試工具

評論