gdb多线程调试

news/2024/11/14 13:05:35/

gdb多线程调试
1.背景
采用gdb调试代码时,经常遇到多线程的情况,但对gdb在多线程中的切换并不熟悉,导致排查问题很困难,所以整理下多线程调试方法。
2.gdb多线程调试指令及简介
调试代码时先将代码跑起来,然后ctrl+c将代码中断。
bt打印出堆栈时,f 栈编号 可以直接执行该函数
查看线程信息:i threads [id …]
不指定id就查看所以的线程信息。
切换线程:thread id
在多个线程执行指令:thread apply all bt
锁定当前线程,暂停其它线程:set scheduler-locking on,
如果只想n或者s单步调试锁定线程时:set scheduler-locking step
取消锁定set scheduler-locking off
注意:打了断点后,执行到断点会暂停所有线程。
3.代码示例

#include<iostream>
#include<thread>
#include<mutex>
using namespace std;
mutex lock1;
int cnt = 0;
void fun1()
{while(1){{lock_guard<mutex> l(lock1);std::cout << "callfun1 cnt:"<< cnt++ << std::endl;}std::this_thread::sleep_for(std::chrono::milliseconds(500));}
}
void fun2()
{while(1){{lock_guard<mutex> l(lock1);std::cout << "callfun2 cnt:"<< cnt++ << std::endl;}std::this_thread::sleep_for(std::chrono::milliseconds(500));}
}int main()
{thread thd1(fun1);thread thd2(fun2);thd1.join();thd2.join();cout << "thread 1 and 2 is end" << endl;return 0;
}

查看进程信息
在这里插入图片描述
切换进程
在这里插入图片描述
堆栈打印和进入函数
在这里插入图片描述
线程锁定前效果:
在这里插入图片描述
线程锁定后效果:
在这里插入图片描述

参考文档:
https://github.com/hellogcc/100-gdb-tips
https://www.cnblogs.com/hellokitty2/p/16869185.html


http://www.ppmy.cn/news/41147.html

相关文章

Python 小型项目大全 76~81

七十六、井字棋 原文&#xff1a;http://inventwithpython.com/bigbookpython/project76.html 井字棋是一种在3 3网格上玩的经典纸笔游戏。玩家轮流放置 X 或 O 标记&#xff0c;试图连续获得三个。大多数井字棋都以平局告终&#xff0c;但如果你的对手不小心&#xff0c;你也…

大数据项目实战之数据仓库:电商数据仓库系统——第3章 维度建模理论之事实表

第3章 维度建模理论之事实表 3.1 事实表概述 事实表作为数据仓库维度建模的核心&#xff0c;紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用&#xff08;维度表外键&#xff09;以及该业务过程的度量&#xff08;通常是可累加的数字类型字段&#xff09;。 3.…

基于matlab构建 5G 城市宏蜂窝测试环境

一、前言此示例展示了如何构建 5G 城市宏蜂窝测试环境&#xff0c;并在地图上可视化信干噪比 &#xff08;SINR&#xff09;。测试环境基于ITU-R M.报告[IMT-2020.EVAL][1]用于评估5G无线电技术。此报告在第 8.2 节中定义了几个测试环境和使用场景。本示例中的测试环境基于以行…

无重复全排列 [2*+]

目录 无重复全排列 [2*+] 程序设计 程序分析 无重复全排列 [2*+] 输出N个数的无重复全排列 Input 输入一个数值N 1<=N=50 Output 输出N个数的无重复全排列,每个数之间用空格隔开 最后一行输出无重复全排列的个数。 Sample Input 3 Sample Output 1 2

4.8---系统知识复习之Mybatis(复习版本)

1、什么是Mybatis&#xff1f; 1.Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;加载驱动、创建连接、创建statement等繁杂的过程&#xff0c;开发者开发时只需要关注如何编写SQL语句&#xff0c;可以严格控制sql执行性…

基于imx8m plus开发板全体系开发教程3:Ubuntu 20.04 编译

前言&#xff1a; i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心&#xff0c;运行频率 1.8GHz;1 个 Cortex-M7 核心&#xff0c;运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU&#xff0c;大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

2022国赛32:NFS服务

大赛试题内容: (四)NFS 服务 【任务描述】 为了使局域网中的特定用户,能够访问共享文件夹内 的特定资源,请采用文件共享,实现共享资源的安全访问。 1.配置 linux2 为 KDC 服务器,负责 linux3 和 linux4 的验证。 2.在 linux3 上,创建用户,用户名为 tom,uid=222,gid=…

卫星物联网悄然崛起,万亿市场价值即将井喷

今天这篇文章&#xff0c;我们来聊聊卫星物联网。请大家注意&#xff0c;我说的是“物联网”&#xff0c;而不是“互联网”。物联网&#xff0c;Internet of Things众所周知&#xff0c;按使用对象&#xff0c;互联网可以分为“人联网”和“物联网”。我们普通消费者用户使用的…