多进程多线程GDB调试
 
一、线程调试指南:
 
1. gdb attach pid 挂载到调试进程 
2. gdb$ set scheduler-locking on 只执行当前选定线程的开关
3. gdb$ info threads 显示当前进程中的线程
==============out put example=========================
 12 Thread 0x41f16940 (LWP 6922)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  11 Thread 0x42917940 (LWP 6923)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  10 Thread 0x43318940 (LWP 6924)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  9 Thread 0x43d19940 (LWP 6925)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  8 Thread 0x4471a940 (LWP 6926)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  7 Thread 0x4511b940 (LWP 6927)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  6 Thread 0x40a03940 (LWP 6928)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  5 Thread 0x40b04940 (LWP 6929)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  4 Thread 0x40c05940 (LWP 6930)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  3 Thread 0x4521c940 (LWP 6931)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  2 Thread 0x45c1d940 (LWP 6932)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  1 Thread 0x2b277c3bba40 (LWP 6913)  0x00000036e74cced2 in select () from /lib64/libc.so.6
==============out put example=========================
  说明 进程中的线程安装 1,2,3 ..编号
 
4. gdb$ thread 1  调试1线程
   gdb$ info threads
==============out put example=========================
 12 Thread 0x41f16940 (LWP 6922)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  11 Thread 0x42917940 (LWP 6923)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  10 Thread 0x43318940 (LWP 6924)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  9 Thread 0x43d19940 (LWP 6925)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  8 Thread 0x4471a940 (LWP 6926)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  7 Thread 0x4511b940 (LWP 6927)  0x00000036e74cced2 in select () from /lib64/libc.so.6
  6 Thread 0x40a03940 (LWP 6928)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  5 Thread 0x40b04940 (LWP 6929)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  4 Thread 0x40c05940 (LWP 6930)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  3 Thread 0x4521c940 (LWP 6931)  0x00000036e7c0ab99 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
  2 Thread 0x45c1d940 (LWP 6932)  0x00000036e74cced2 in select () from /lib64/libc.so.6
 *1 Thread 0x2b277c3bba40 (LWP 6913)  0x00000036e74cced2 in select () from /lib64/libc.so.6
==============out put example=========================   
  *代表选定线程
  
5. gdb$ b function_name 设置断点端到的函数
6. 通过执行
   gdb$ thread id  调试id线程
   执行
   gdb$ continue
   如果能够到达断点说明,函数在该函数中执行,运气很好,直接开始调试
   
   否则,CTRL+C 跳出该线程
   
   调试下一个线程,直到找到调试线程,开始调试。
   
二、进程调试指南:
 
程序又多个进程组成,在一个父进程中创建子进程,调试方法如下:
gdb$ set follow-fork-mode [child|parent] 设置fork后,跟踪进程
 
后续可以再进行多线程调试。
  
以上功能是在gdb6.4的功能
 
gdb6.6中增加了
gdb$ set detach-on-fork [on|off]
   on: 断开 follow-fork-mode 指定进程
   off:gdb控制调试父子进程,follow-fork-mode指定进程被调试,另外一个被挂起。

多进程多线程GDB调试 (转)的更多相关文章

  1. gdb调试多进程和多线程命令

     gdb调试多进程和多线程命令 来源:http://blog.csdn.net/pbymw8iwm/article/details/7876797 1. 默认设置下,在调试多进程程序时GDB只会调试主 ...

  2. gdb常用命令及使用gdb调试多进程多线程程序

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  3. GDB 调试多线程多进程

    GDB是linux下的调试利器,在c/c++程序开发过程中必不可少的.这里总结一下多进程和多线程的调试方法和技巧. 多进程的调试: 如下示例 #include <sys/mman.h> # ...

  4. gdb调试多进程多线程程序

    一.调试的指令 1.list命令 list linenum 显示程序第linenum行的周围的程序 list function 显示程序名为function的函数的源程序 list 显示当前行后面的源 ...

  5. Linux多进程和多线程的一次gdb调试实例

    转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ...

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

    http://blog.csdn.net/freeelinux/article/details/53700266 一:普通命令   1.list命令 list  linenum      显示程序第l ...

  7. Gdb调试多进程程序

    Gdb调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办 ...

  8. 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令

    gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...

  9. gdb常用命令及gdb调试多进程/线程程序&coredump

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

随机推荐

  1. python基础学习之路No.4 数据转换以及操作

    练习python的时候经常会用到一些不同数据类型之间的转换操作 搜集了一些资料,整理如下 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个 ...

  2. IntelliJ IDEA 去除IDE自动的参数名 提示功能

  3. (一)问候 HttpClient

    第一节: HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并 ...

  4. Linux学习笔记:输入输出重定向 >>命令

    Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变.比如说我不想看到在显示器的输出,而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. 将stdout重定 ...

  5. EVA:自定义字段实现

    原文链接:http://blog.csdn.net/ytangdigl/article/details/70145910 前言 自定义字段又叫做“开放模型”,用户可以根据自已的需求,添加需要的字段,实 ...

  6. 浅谈C#中的模式窗体和非模式窗体

    ShowDialog(); // 模式窗体 Show(); // 非模式窗体 区别: 返回值不同,DialogResult/void 模式窗体会使程序中断,直到关闭模式窗口 打开模式窗体后不能切换到应 ...

  7. 为什么Java中Long类型的比float类型的范围小?

    为什么Long类型的比float类型的范围小? 2015-09-15 22:36 680人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个常识,我们都知道浮 ...

  8. python根据字典自动生成一组省和市名

    字典如下: dict={ '河北省':['石家庄','唐山','秦皇岛','承德'], '山东省':['济南','青岛','临沂','淄博'], '湖南省':['长沙','衡阳','湘潭','邵阳', ...

  9. loadrunner日志信息

    日志分两种1.在VUGEN中运行后的日志2.在controller中运行后的日志 日志设置分两步:1.首先,在VUGEN或controller中run-time setting, 选中always s ...

  10. .NET Runtime version 2.0.50727.xxx 执行引擎错误。 (Fatal Execution Engine Error)

    如题问题困扰本人良久. 尝试VS2005.VS2008.VS2010均出现过次问题. 主要现象: 1. Window设计器会崩溃,直接挂掉.(当逐条注释掉一些静态构造函数内的代码是情况好转) 2. 发 ...