精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    1337

    瀏覽量

    40085
  • 調試
    +關注

    關注

    7

    文章

    551

    瀏覽量

    33765
  • MySQL
    +關注

    關注

    1

    文章

    789

    瀏覽量

    26286

原文標題:通過GDB non-stop mode 調試MySQL

文章出處:【微信號:inf_storage,微信公眾號:數據庫和存儲】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    QEMU+GDB調試ARM程序

    通過GDB調試代碼的便利性無需贅言。我們直接以調試meta-hypervisor為示例進行說明。
    的頭像 發表于 10-08 09:17 ?2692次閱讀

    使用GDB調試Linux應用程序

    本篇講解使用GDB調試Linux應用程序,以下以 `hellowld.c` 為例介紹 GDB調試入門。
    發表于 06-27 15:48 ?411次閱讀

    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 ?1634次閱讀

    GDB調試命令總結

    的話,默認是會啟動所有線程。這種模式有一種副作用,如果多個線程都斷在同一個函數,這時候調試會出問題。這個時候需要打開線程鎖,但打開線程鎖,意味著其它線程不能運行了。(2)non-stop模式(7.0以后
    發表于 04-02 14:31 ?1087次閱讀

    使用 GDB 調試多進程程序

    的特點或者其他一些輔助手段來達到目的。此外,GDB 也在較新內核上加入一些多進程調試支持。接下來我們詳細介紹幾種方法,分別是 follow-fork-mode 方法,attach 子進程方法和
    發表于 04-02 14:33 ?503次閱讀

    Linux應用的GDB調試的原理及過程分析

    GDB調試是應用程序在開發板上運行,然后在PC機上對開發板上得應用程序進行調試,PC機運行GDB,開發板上運行GDBServer。在應用程序調試
    發表于 03-05 09:44 ?3333次閱讀
    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 ?810次閱讀

    ARM平臺如何玩轉GDB遠程調試?

    前言關于GDB工具GDB工具是GNU項目調試器,基于命令行使用。和其他的調試器一樣,可使用GDB工具單步運行程序、單步執行、跳入/跳出函數、
    的頭像 發表于 09-28 18:17 ?841次閱讀
    ARM平臺如何玩轉<b class='flag-5'>GDB</b>遠程<b class='flag-5'>調試</b>?

    GDB調試工具的原理

    一、GDB調試工具的原理 1.1 未執行進程調試 啟用gdb調試運行gdb ./test的時候,
    的頭像 發表于 11-09 17:04 ?690次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調試</b>工具的原理

    如何使用GDB調試工具

    在對應程序目錄中使用下面的命令 gdb test 2、調試已經開始運行的程序進程 調試已經開始運行的程序進程,首先先用top命令查看運行的程序進程的pid如下: 比如我要加載的程序
    的頭像 發表于 11-09 17:17 ?612次閱讀
    如何使用<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 ?1972次閱讀