gdb 调试多线程
基本i threads 等操作略过,只谈线程同步、异步控制:
先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后,
再切换到t2,发现t3还在运行(如果t3卡在了断点上,也算运行,只不过运行后停止了)。
再点到,gdb 直接attach 到非主线程时,是不影响,其他线程的启停的。无论如何设置non-stop或者schedule选项。
以下,重点说下non-stop和schedule选项:
1 non-stop
只能在~/.gdbinit里设置,不能在gdb运行时设置,设置内容为:
set target-async 1
set pagination off
set non-stop on
attach到主线程t1后,切换t3,
设置t3和t2内部的断点,执行c,t3运行后卡在断点,但是t2是不运行的,此时应t apply t2 t3(为了回到中断,只写t2会无法输入gdb操作) c,才能通知t2运行。
如果t2无断点,那么一次t apply t2 t3后,他就是一直执行的了!
2 scheduler-locking选项
可以在主线程或者子线程设置均可。
在使用step或者continue命令调试当前被调试线程的时候,
off 不锁定任何线程,也就是所有线程都执行;如果
on 只有当前被调试程序会执行;
step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
可以理解为step锁,非step不锁。
t2和t3设置断点后,设置sche为off(俩t都执行)或者on(只看到一个thr执行),直接c,就能看到t2和t3的同步或异步效果;
这时,如果t app 2 3 c,执行,效果和c一样,即使t2、t3只有一个断点,也会同时停下来的(non-stop在非断点的t不会停,除非新设b断干预之)。
注意:set non-stop on和scheduler-locking同时设置效果未定义,测试,设置non-stop后再设置sche=on貌似无效!
参考:
coolshell的 gdb系列
gdb技巧集 http://www.kancloud.cn/wizardforcel/gdb-tips-100/146771
gdb 调试多线程的更多相关文章
- 使用gdb调试多线程程序总结
转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...
- Debugging with GDB 用GDB调试多线程程序
Debugging with GDB http://www.delorie.com/gnu/docs/gdb/gdb_25.html GDB调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为 ...
- 【疑难杂症】gdb调试多线程程序报错:interrupted system call
一. cmake生成可调试版本的程序,该内容参考自https://www.linuxidc.com/Linux/2014-03/98622.htm 具体内容如下: 1, 使用CMAKE编译确实很方便. ...
- gdb 调试多线程 神贴
gdb 调试多线程如果目标进程已经core dump了,那么 gdb -c core xxx xxx是对应的程序文件.如果目标进程还在运行,通常此时用于调试线程死锁的情况.有两种方法一是 gdb ...
- GDB调试多线程
先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. th ...
- gdb调试多线程程序总结
阿里核心系统团队博客 http://csrd.aliapp.com/?tag=pstack Linux下多线程查看工具(pstree.ps.pstack) http://www.cnblogs.com ...
- gdb调试多线程多进程
多进程调试 我们使用gdb调试程序,gdb的调试默认是调试父进程的,如果要做到对父进程和子进程都做到调试,所以附加了调试子进程的功能. 设置条件 如果让gdb可以同时调试多个程序,只需要设置follo ...
- GDB 调试多线程多进程
GDB是linux下的调试利器,在c/c++程序开发过程中必不可少的.这里总结一下多进程和多线程的调试方法和技巧. 多进程的调试: 如下示例 #include <sys/mman.h> # ...
- GDB调试多线程程序
gdb有thread相关命令,如info thread(简写成info th)显示线程消息,b xx thread yy可以针对某个thread设置断点,thread xx(简写成thr xx)切换到 ...
随机推荐
- Bzoj3041 水叮当的舞步
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 132 Solved: 75 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物 ...
- Linux and symmetric multiprocessing
没空看,暂时留着 http://www.ibm.com/developerworks/library/l-linux-smp/
- RocketMQ原理解析-Consumer
consumer 1.启动 有别于其他消息中间件由broker做负载均衡并主动向consumer投递消息,RocketMq是基于拉模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消 ...
- Java NIO浅析
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接 ...
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
前言:这几天一直都在研究模糊聚类.感觉网上的文档都没有一个详细而具体的讲解,正好今天有时间,就来聊一聊模糊聚类. 一:模糊数学 我们大家都知道计算机其实只认识两个数字0,1.我们平时写程序其实也是这样 ...
- bat基础
首先所有命令在cmd命令行中都能找到说明: 例如 想知道type用法 输入type /? 其他命令都一样 type [drive:][path] filename 显示文本文件内容 虽然有点鸡肋 1 ...
- ueditor工具栏新增按钮教程
我做了一个人博客网站想要一段文字高亮显示,大概是这样: 但是ueditor上面的代码语言是一大块的<pre></pre>标签,觉得不合适,就在网上搜索相关文章,自己结合着实现了 ...
- [Java] Spring MVC 知识点
云图: @Service 用于标注业务层组件. 在 Spring-servlet 配置xml中,component-scan 标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Compone ...
- Linux下安装 MySQL
Ubuntu环境 使用二进制安装包安装,相对简单绿色 1.到官网下载二进制压缩包http://dev.mysql.com/downloads/mysql/ 2.选择需要的版本 目前最新为5.7.之后选 ...
- apache 配置rewrite模块,URL中隐藏index.php
打开httpd.conf 去掉下面的井号 #LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉 在网站根目录添加.htaccess Rew ...