多进程多线程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指定进程被调试,另外一个被挂起。

转载于:https://www.cnblogs.com/zengkefu/p/4952818.html

多进程多线程GDB调试 (转)相关推荐

  1. linux的基础知识——多线程gdb调试

    1.gdb调试 \qquadgdb调试命令,在生成可执行文件时,加-g gcc xxx.c -o xxx -g \qquad执行gdb xxx,就可以跳转到gdb调试界面,对xxx进行调试. \qqu ...

  2. GDB 调试多进程或者多线程应用

    GDB 是 linux 系统上常用的 c/c++ 调试工具, 功能十分强大. 对于较为复杂的系统, 比如多进程系统, 如何使用 GDB 调试呢? 考虑下面这个三进程系统 : 进程 ProcessChi ...

  3. 使用gdb调试多进程和多线程

    GDB调试多进程 1. 默认设置下,在调试多进程程序时GDB只会调试主进程.但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序.只需要设置follow-f ...

  4. [Linux]gdb调试多进程多线程例程

    gdb相信学linux的同学已经比较熟悉了吧,它是linux下代码调试工具.我们在写c语言,c++的代码时经常会用到,它有一些常用的调试命令: run(r):运行程序,如果有断点在下一个断点处停止 s ...

  5. gdb调试多进程和多线程

    ※进程 (1)默认设置下,在调试多进程程序时GDB只会调试主进程.但是GDB支持多进程的分别以及同时调试,也就是说,GDB可以同时调试多个程序.只需要设置follow-fork-mode和detach ...

  6. Linux gdb调试(4):多进程与多线程调试

    一,gdb的基础知识 1>介绍: gdb是Linux环境下的代码调试工具. 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出 ...

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

    今天把所有的GDB常用的调试命令都过了一遍,尤其是多线程调试.所以先做个总结,以免忘记.以后如果有新的有用的命令会继续追加. 本文地址:(LYanger的博客:http://blog.csdn.net ...

  8. linux中多进程调试,linux下用gdb调试多进程

    今天来学习一下linux下gdb如何调试多进程,在学习之前我我们能先看一张表: 这张表是gdb调试的命令表,这对那些对gdb不熟的同学来说是非常有必要的. 一.多进程调试的命令 1.set follo ...

  9. gdb调试多进程程序

        1.gdb下调试多进程程序只需要以下几条命令即可              除此之外还可以查看正在调试的进程 info inferiors, 同时也可以将当前正在调试的进程切换到另外一个进程中 ...

最新文章

  1. 《Kotlin极简教程》第三章 Kotlin基本数据类型
  2. Win8 x64 + Office Word 2013 x64 无法自动加载 Endnote X6 的解决方案
  3. 关于Excel导入的问题记录
  4. 用pytorch加载训练模型
  5. Catboost原文解读
  6. [转]踏实从小事做起, 才能有大发展
  7. ADO RecondsetPtr 以及如何实现对表的增加删除数据
  8. 经典神经网络 | 从Inception v1到Inception v4全解析
  9. 去掉WINDOWS SERVER 开机按CTRL+ALT+DEL登陆的方法
  10. 用python建云盘_超简单!基于Python搭建个人“云盘”
  11. Kaggle电影数据集:movies_metadata.csv
  12. 使用百度地图绘制热力图
  13. IOS github客户端操作流程 超详细
  14. Logback文件详解
  15. matlab 怎么打开.p文件,matlab p文件肿么打开 或者 运行
  16. 逆波兰式是什么(以及dc计算器如何使用)
  17. Spring Boot 结合 FreeMarker导出word文件
  18. 为什么别人在微信卖东西不会被人拉黑
  19. 关于考研的几个潜规则
  20. Java打印实心菱形与空心菱形

热门文章

  1. 数据绑定控件之DataList
  2. Request 分别获取具有相同 name 属性表单元素值—— 怀念 Classic ASP (转自博客园)
  3. Linux下Hadoop hdfs Java API使用
  4. 理论计算机初步:概率算法和近似算法
  5. 活动图与流程图的区别
  6. Makefile_02:程序的编译和链接
  7. C++ 多继承和虚继承的内存布局
  8. Kubernetes网络一年发展动态与未来趋势
  9. 广播的最佳实践——实现强制下线功能(Android_Broadcast)...
  10. 【SQL】在SQL Server中多表关联查询问题