gdb调试多线程的简单命令

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

由于平时的编程当中经常会用到多线程,我想接触过多线程编程的人应该都会清楚多线程如果出了错,调起bug来是有多么麻烦,应为你某个地方出错了,有可能并不是这里的问题而是线程执行到这就切换到其他线程,而出错的是其他线程,我以前使用的办法是给某个线程sleep然后让内核自己调度去执行其他线程。很明显这种方法当有很多线程是并不是很使用,所以我就翻书学了几条调试多线程的简单gdb命令

1.测试所用的代码

1void *thread1(void *arg)
2{
3   printf("New thread1\n");
4   return NULL;
5}

6void *thread2(void *arg)
7{
8   printf("New thread2:\n");
9   return NULL;
10}

11int main(void)
12{
13  int err;
14  pthread_t tid1,tid2,tid3;
15  16if(pthread_create(&tid1,NULL,thread1,NULL) < 0)
17  {
18      printf("线程1创建失败\n");
19      exit(1);
20  }

21  22if(pthread_create(&tid2,NULL,thread2,NULL) < 0)
23  {
24      printf("线程2创建失败\n");
25      exit(1);
26  }

27if(pthread_create(&tid3,NULL,thread2,NULL) < 0)
28  {
29      printf("线程3创建失败\n");
30      exit(1);
31  }

32  printf("Run main thread:");
33  sleep(2000);
34  return 0;
35}

2.调试命令

首先设置三个断点让4个线程运行到对应的位置都停止运行具体操作见下图

其中图中断点22,28,54,对应测试代码的3,8,32

1.info threads
功能:显示当前可调试的所有线程,并且gdb会为每个线程分配一个ID(不是线程ID),我们之后的操作可以根据这个ID来确定操作哪个线程具体操作见下图


如上图所示ID1,2,3分别是gdb给予每个线程的新ID,我们之后操作线程就用它,ID为2的线程前面的*表示当前调试的线程为此线程
2.thread ID
调试目标ID指定的线程

3.set scheduler-locking [off|on|step]
在调试多线程程序时,默认除了被调试的线程在执行外,其他线程也都在运行,我们可以通过命令来控制这一切:off表示不锁定任何线程on表示只有当前调试的线程会继续运行,step表示在但不执行时只有当前线程会运行

3.总结

在用gdb调试多线程时,首先我们可以用info threads命令来查看可调时的线程,并获取其ID,接着调用thread ID来切到我们想要调试的线程,最后通过set scheduler-locking [参数]
来控制我们希望的线程运行方式

gdb调试命令----小话c语言(15) 本文介绍了在Mac系统下使用GDB调试C程序的基本方法。首先演示了如何编译带调试信息的程序并进入GDB调试状态,包括查看源代码和运行程序。接着讲解了查看调试信息的方法,以及如何调试core文件。文章还详细说明了多个实用的GDB调试技巧:获取变量类型(info/whatis)、执行外部命令(shell)、强制函数返回值(return)、修改变量值(set var)、查看函数信息(info frame)、查看内存数据(x/print)、跳转执行(jump)、调用函数(call)以及多线程调试方法。这些技巧涵盖了 阅读详情

相关推荐

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

CSDNFrewen的博客 3348

gdb调试知识积累——真·详解

gdb调试

m0_51551385的博客 1258

机器学习(ML)在材料领域应用

机器学习作为一种兼顾开发效率以及开发成本的方法,已经逐渐应用于材料发现、结构分析、性质预测、反向设计等多个领域,并且在材料学研究中展现出惊人的潜力。传统的发现新材料的方法,如经验试错法和基于密度泛函理论(DFT)的方法,往往需要较长的研发周期,成本高、效率低,已经不能很好的适应如今需求量激增的材料学领域 ...

W5632DE的博客 3687

gdb多线程调试

先介绍一下GDB多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试线程。 thread ID 切换当前调试线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2

nosmatch的专栏 1215

linux下gdb命令怎么进去线程,Linux下gdb线程调试

多线程调试命令1、info threads:这条命令显示的是当前可调试的所有线程,GDB会给每一个线程都分配一个ID。前面有*的线程是当前正在调试线程。2、thread ID:切换到当前调试线程为指定为ID的线程。3、thread apply all command:让所有被调试线程都执行command命令4、thread apply ID1 ID2 … command:这条命令是让线程编...

weixin_35751194的博客 1168

7、用 GDB 调试多线程程序

GDB 调试多线程程序

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 1713

gdb调试info threads只能显示一个进程问题

gdb调试info threads只能显示一个进程问题 问题: 在一个Linux环境中(dm81XX),调试多线程程序不正常,info threads看不到多线程的信息。 查看过程: 1.先用命令maintenance print target-stack看了一下target的装载情况,发现target"multi-thread"没有被装载,用GDBGDB进行调试,发现在 函数check_for...

tsh123321的博客 2050

gdb调试多线程

下文参考以下链接:http://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html 首先先介绍多线程调试的基本命令:  1.info threads,显示当前可调试的所有线程。每个线程会有gdb为其分配的ID,后面的操作会用到这个ID。前面带'*'号的是当前正在调试线程。  2.thread ID,切换当前调试线程为指定ID的

微风 2万+

【Linux】gdb 调试C/C++程序 调试core文件 多线程 多进程程序

gdb的基本使用。

一点一点变好 1473

Linux、C 、gdb调试

喜欢兰花山丘 原文转自:https://www.cnblogs.com/life2refuel/p/5396538.html 目送飞云, 一切安好 Linux基础 30分钟GDB调试快速突破 引言Linus心灵鸡汤   在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个活着的传奇Linus Torvalds   Unix 始于上个世纪6...

jack__ming的专栏 414

GDB断点失效

GDB还是很深的学问,以前一直深知高并发程序调试的难度, 还是要找时间去学习一下。 最近多线程的问题比较多,GDB用着总是怪怪的,水还真是深呐。 info thread只显示一个线程,但实际上我的线程数应该是很多的,不知道为什么其他线程都看不到。 打断点,i b可以看到,但是程序却不会停止,感觉那个线程已经脱离了当前进程存在了。 下面这个帖子是因为fork出来子进程,而我是用线程pthr

waterhawk的专栏 7566

GDB简明手册

gdb <可执行文件> 使用gdb进入程序 断点 1、b + 行号,设置对应行号为断点 2、b + 函数名称,设置对应函数为断点 3、info break, 可以查看断点信息 4、delete + 断点编号, 删除对应编号的断点 5、clear + 行号,删除对应行号断点 6、delete + (编号起点-编号终点),删除起点和终点的所有断点(包括起点和终点) 7、disable + 断点编号,可以禁用断点 enable + 断点编号:启用断点 r , 重新开始运行 回车键:重复上一条命令 s

Charles Ren's Tech Blog 698

linux多线程调试

linux多线程调试

Inversel的博客 713

gdb时出现SIG32信号

在使用gdb调试多线程时产生了SIG32信号,如下 Program received signal SIG32, Real-time event 32. 通过敲入命令 handle SIG32 nostop 来让程序继续运行 但是为什么会产生SIG32呢,是我的程序出错了么 后来发现当多线程编程时,在线程退出时会产生SIG32信号。

u011431128的博客 5288

ps+gdb查找100%CPU bug

同事的多线程代码中,存在100%CPU占用的bug,未知问题所在。 其实只要知道几个命令,定位这个问题很简单。 这里记录一下调试过程。 1. 用ps 查看哪个线程消耗了CPU。 $ ps -m -o tid,cpu,time -p 4172 TID CPU TIME - - 00:01:22 4172 - 00:00:17 4183 - ...

移动开发记录 348

GDB多线程调试调试命令+调试演示)

多线程调试 (一)多线程调试命令 shell的命令: (1)查看当前运行的进程:ps aux | grep book (2)查看当前运行的轻量级进程:ps -aL | grep book (3)查看主线程和子线程的关系:pstree -p 主线程id gdb命令: (1)查看可切换调试线程:info threads (2)切换调试线程:thread 线程id (3)只运行当前线程set scheduler-locking on (4)运行全部的线程set schedul..

weixin_42158742的博客 2万+

GDB调试命令大全

使用singal命令,可以产生一个信号量给被调试的程序。如:中断信号Ctrl+C。这非常方便于程序的调试,可以在程序运行的任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号非常有利程序的调试。single命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由GDB截获的,而single命令所发出一信号则是直接发给被调试程序的。UNIX的系统信号量通常从1到15。所以取值也在这个范围。

z2812470857的博客 3660

GDB常用调试命令以及多进程多线程调试

今天把所有的GDB常用的调试命令都过了一遍,尤其是多线程调试。所以先做个总结,以免忘记。以后如果有新的有用的命令会继续追加。 一:普通命令 1.list命令 list  linenum      显示程序第linenum行周围的程序list  function      显示函数名为function的函数的源程序list                      显示当前行后

FreeeLinux's blog 9804

gdb调试基本命令(非常详细)

gdb基本命令 本文介绍使用gdb调试程序的常用命令。 简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 一般来说,GDB主要完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 当程序被停住时,可以检查此时...

Aiky哇 8738

线程的查看以及利用gdb调试多线程

1. 线程的查看 首先创建两个线程: #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;unistd.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;pthread.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt; #in

zhangye3017的博客 10万+
上一篇: linux下select,poll,epoll的使用与重点分析
下一篇: Linux下nc的参数详解
Shreck66
博客等级 码龄11年 118粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值