zoukankan      html  css  js  c++  java
  • gdb多线程调试

    分为两种模式:all-stop模式和no-stop模式.(gdb7.0之前不支持no-stop模式)

    1.all-stop:

    当程序在gdb因某种原因停止时,所有的线程都会停止.一般来说,gdb不能够单步所有线程,因为线程调度室gdb无法控制的(???).无论何时,当gdb停止你的程序时.它都会自动切换到触发断点的那个线程.

    2.no-stop:(网络编程常用)

    只是当前线程会被停止,而其他线程将会继续运行.此时step,next只对当前线程起作用.

    gdb调试多线程常用命令:

    (1)info threads : 显示可以调试的所有线程

    (2)thread ID : 切换到指定ID的线程

    (3)其他 
    break FileName.cpp:LinuNum thread all: 
    所有线程都在文件FileName.cpp的第LineNum行有断点。

    thread apply ID1 ID2 IDN command: 
    让线程编号是ID1,ID2…等等的线程都执行command命令。

    thread apply all command:所有线程都执行command命令。

    set scheduler-locking off|on|step: 
    在调式某一个线程时,其他线程是否执行。在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让他运行。

    off:不锁定任何线程,默认值。 
    on:锁定其他线程,只有当前线程执行。

    step:在step(单步)时,只有被调试线程运行。

    set non-stop on/off: 
    当调式一个线程时,其他线程是否运行。

    set pagination on/off: 
    在使用backtrace时,在分页时是否停止。

    set target-async on/ff: 
    同步和异步。同步,gdb在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。

    show scheduler-locking: 
    查看当前锁定线程的模式

    参考文献:

    gdb调试多进程多线程程序:https://www.cnblogs.com/JN-PDD/p/6953136.html

    gdb调试多进程与多线程:https://blog.csdn.net/snow_5288/article/details/72982594

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    ES 2016+
    git-svn for mac
    Linux系统下安装rz/sz命令及使用说明
    Nginx location指令匹配顺序规则
    nginx修改配置后不生效的问题
    ssh and scp从远程服务器下载文件
    安装yii2 框架遇到的问题
    php添加openssl扩展
    GitHub Token for composer
    centos7+nginx+php+mysql环境搭建
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/9038273.html
Copyright © 2011-2022 走看看