通过GDB non-stop mode调试MySQL

通过gdb non-stop mode 调试mysql, 特别是用于复现死锁场景, 需要按照一定的并发顺序写入才可以构造出来, 通过gdb non-stop mode 可以非常方便进行构造
但是用法是先开启 gdb, 然后在 attach mysql_pid 才可以. 不能启动的时候就 attach 到 mysql pid
可以通过设置set non-stop on, non-stop mode 来实现gdb 只block 一个thread, 然后其他thread 继续执行的方法.
in non-stop mode, when a thread stops to report a debugging event, only that thread is stopped;
经常需要配合这几个一起用
set target-async 1
set pagination off
set non-stop on
这一行可以直接启动的时候就设置好
gdb —quiet -ex ‘set pagination off’ -ex ‘set target-async on’ -ex ‘set non-stop on’
在 non-stop mode 里面, 如果断点被某一个线程命中, 那么只有该线程是停止的, 其他线程继续 running.. 上图可以看到只有 thread 66 是停止的, 其他 thread 都在运行钟.
在 non-stop mode 中, 如果想让其他所有 thread 继续运行, 需要执行 c -a(continue -a), 如果只是执行 c(continue), 那么只有当前 thread 运行.
通过 continue 只运行当前 thread, 就可以切换 thread, 执行 continue,  做到多个 thread 轮流运行的效果, 用于复杂场景复现.
比如这个 example 把断点打在 do_command 上面, 那么就两个 client 连接进来执行 命令以后, 都停止在了 do_command 上, 这个时候可以按照我们的需求去执行哪一个 thread.
比如我这里又增加了一个 breakpoint lock_rec_lock, 我想让 thread 66 先执行, 那么我就t 66, 然后在这里执行 continue,  那么就会发现 t 66 跳到下一个断点.
这个时候可以再切到 thread 67 让他去执行, 因为 thread 66 已经断在一个地方了. 这个时候我们直接让 thread 67 执行完成就变成这样
可以看到 thread 66 还停在这里, 但是 thread 67 已经执行结束了.


ERG推出可兼容替代CCFL逆变器的LED驱动器
无纺布表面瑕疵在线检测设备的原理、性能及特点
工业4.0时代,微智达提供嵌入式工控机专业定制方案
智佳能第三代氮化镓分容水冷一体机降本增效领先优势
ASML支持福建晋华 低调运转不停工
通过GDB non-stop mode调试MySQL
超微SYS-5028D-TN4T塔式NAS的详细参数
纵行科技携ZETA亮相世界物联网博览会,助力全球物联网生态合作
直流电机可控硅调速原理及常见故障检修
那些关于传感器的风云录
红米Note7S真机照公布 后置双摄呈纵向排布支持背部指纹识别
FPGA在边缘设备上的发展将依靠物联网的助力
风速风向传感器的应用和原理解析
贝加莱的8KS系列新一代电机
怎样进行树莓派设置
BTL音频功率放大器TDF8554J的特性优势及应用
种子发芽箱概述及技术参数
新舟700全机的研制已正式进入了新阶段
电视盒子哪个牌子好?体验师分享2022年11.11电视盒子推荐
孟加拉国对光伏废弃物进行回收处理