0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过GDB non-stop mode调试MySQL

数据库和存储 来源: MySQL内核剖析 2023-09-25 10:34 次阅读

通过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’

0f160ade-5b4c-11ee-939d-92fbcf53809c.png

在 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.

0f223eee-5b4c-11ee-939d-92fbcf53809c.png

比如我这里又增加了一个 breakpoint lock_rec_lock, 我想让 Thread 66 先执行, 那么我就t 66, 然后在这里执行 continue, 那么就会发现 t 66 跳到下一个断点.

0f354c5a-5b4c-11ee-939d-92fbcf53809c.png

这个时候可以再切到 Thread 67 让他去执行, 因为 Thread 66 已经断在一个地方了. 这个时候我们直接让 Thread 67 执行完成就变成这样

0f3b79c2-5b4c-11ee-939d-92fbcf53809c.png

可以看到 Thread 66 还停在这里, 但是 Thread 67 已经执行结束了.

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1384

    浏览量

    40458
  • 调试
    +关注

    关注

    7

    文章

    590

    浏览量

    34112
  • MySQL
    +关注

    关注

    1

    文章

    831

    浏览量

    26779

原文标题:通过GDB non-stop mode 调试MySQL

文章出处:【微信号:inf_storage,微信公众号:数据库和存储】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    QEMU+GDB调试ARM程序

    通过GDB调试代码的便利性无需赘言。我们直接以调试meta-hypervisor为示例进行说明。
    的头像 发表于 10-08 09:17 3029次阅读

    使用GDB调试Linux应用程序

    本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB调试入门。
    发表于 06-27 15:48 495次阅读

    GDB调试命令手册

    GDB调试命令手册,感兴趣的可以下载看看。
    发表于 11-05 16:36 9次下载

    gdb调试器解析

    3.4 gdb调试调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好、更快地定位程序中的问题从而加快程序开发的进度,是大家都很关注的问题。就如读者熟知的Windows下
    发表于 10-18 13:49 1次下载

    在Linux中如何使用gdb调试C程序?

    通俗的讲,GDB 可以让你看到程序在执行过程时的内部流程,并帮你明确问题的所在。我们将在下一节通过一个有效的示例来讨论 GDB 调试器的用法,但在此之前,我们先来探讨一些之后对你有帮助
    发表于 04-28 15:37 1717次阅读

    GDB调试命令总结

    的话,默认是会启动所有线程。这种模式有一种副作用,如果多个线程都断在同一个函数,这时候调试会出问题。这个时候需要打开线程锁,但打开线程锁,意味着其它线程不能运行了。(2)non-stop模式(7.0以后
    发表于 04-02 14:31 1184次阅读

    使用 GDB 调试多进程程序

    的特点或者其他一些辅助手段来达到目的。此外,GDB 也在较新内核上加入一些多进程调试支持。接下来我们详细介绍几种方法,分别是 follow-fork-mode 方法,attach 子进程方法和
    发表于 04-02 14:33 587次阅读

    Linux应用的GDB调试的原理及过程分析

    GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer。在应用程序调试
    发表于 03-05 09:44 3476次阅读
    Linux应用的<b class='flag-5'>GDB</b><b class='flag-5'>调试</b>的原理及过程分析

    嵌入式Linux GDB调试环境搭建与使用

    /跳出函数、设置断点、查看变量等等。Ubuntu资源充足,可以直接用gdb调试程序。嵌入式Linux性能弱,一般PC上运行源码和GDB工具,可执行文件在开发板上运行。PC上通过
    发表于 11-01 17:59 8次下载
    嵌入式Linux <b class='flag-5'>GDB</b><b class='flag-5'>调试</b>环境搭建与使用

    Linux嵌入式 gdb VSCode图形化调试教程

    文章目录介绍GDB简介交叉编译器的gdb介绍在学习单片机的时候我们可以通过集成式IDE 来进行调试,比如MDK、IAR 等。在嵌入式linux 领域是否也可以进行
    发表于 11-02 12:21 15次下载
    Linux嵌入式 <b class='flag-5'>gdb</b> VSCode图形化<b class='flag-5'>调试</b>教程

    OpenHarmony系统使用gdb调试init

    。如果能使用gdb调试init,会极大的提高定位效率。 本文简单描述了一下L2二次启动的系统如何使用gdb调试init 首先将gdb打包到系
    的头像 发表于 12-26 12:10 988次阅读

    ARM平台如何玩转GDB远程调试

    前言关于GDB工具GDB工具是GNU项目调试器,基于命令行使用。和其他的调试器一样,可使用GDB工具单步运行程序、单步执行、跳入/跳出函数、
    的头像 发表于 09-28 18:17 1060次阅读
    ARM平台如何玩转<b class='flag-5'>GDB</b>远程<b class='flag-5'>调试</b>?

    GDB调试工具的原理

    一、GDB调试工具的原理 1.1 未执行进程调试 启用gdb调试运行gdb ./test的时候,
    的头像 发表于 11-09 17:04 1018次阅读
    <b class='flag-5'>GDB</b><b class='flag-5'>调试</b>工具的原理

    如何使用GDB调试工具

    在对应程序目录中使用下面的命令 gdb test 2、调试已经开始运行的程序进程 调试已经开始运行的程序进程,首先先用top命令查看运行的程序进程的pid如下: 比如我要加载的程序
    的头像 发表于 11-09 17:17 927次阅读
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>调试</b>工具

    如何使用linux下gdb调试python程序

    如何使用linux下gdb调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。
    的头像 发表于 01-31 10:41 2779次阅读