Linux下多线程的简单调试技巧
2017-04-16 10:21
309 查看
写在前面
这次的实验:Linux下的多线程编程,我写了一天,调了一天。感觉本程序猿就是90%的时间用来写代码,90%里有60%用来调试和解决bug的。(捂脸状)这里的调试技巧是我自己总结的一点东西,有什么问题还请指出~
实验环境
Centos 7.0, gcc 4.8.5问题
写三个线程,线程1、2用来分别读取1.dat和2.dat中的数据再分别存进buffer1和buffer2,线程3读取两个buffer并对数据进行加和乘两种操作再输出这个例子有三个线程,我的问题就是经常编译运行完以后不退出程序。调试后发现有一个以上的线程一直在等待资源,而释放资源的线程早就已经结束了 ; 又或者是线程三抢先了之类的(这个是我信号量忘记初始化导致的)。
干货
1.编译以后,比如gcc -o test test.c -lpthread, 进入gdb调试:
gdb test
2.进来以后可以先在三个线程打上断点:
b thread1,
b thread2,
b thread3。(这里b就是break的简写,写break也可以)
3.接下来输入
r运行
4.然后可以输入
n(单条语句执行,next命令简写),或是
c(继续运行程序,continue命令简写)
运行到这里会发现停下来了,但是没有正常的退出:
5.现在我们先用
ctrl + c,让它停一下。
然后,通过命令
info thread查看还在运行的线程信息:
在这里,
Id是gdb给线程分配的id, 前面的
*表示当前的线程是
Id为1的那个
接下来通过命令
thread 4, 我们可以切换到
Id为4的线程中,去查看它到底是谁;通过命令
bt(查看函数栈)查看该线程阻塞在哪儿了。
可以看到的是线程thread3()阻塞在了sem_wait()上。那么接下来我们就应该推一下是什么原因导致了它一直等待而且等不到信号量。
PS: 在
bt后,还可以通过
up,
down来让函数栈往上或往下
b372
相关文章推荐
- Linux环境下一种比较有用的多线程程序调试技巧
- 深入探索Linux coredump调试技巧
- 让多线程调试更简单的宏代码---FreezeThawThreads
- Linux下C语言程序简单的编写和调试
- Linux下,多线程程序死循环问题调试
- Linux下常用调试技巧
- Linux一些简单的使用技巧
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法
- linux下的多线程调试(gdb)
- linux下的多线程调试(gdb) 分类: 嵌入式开发学习 2011-07-21 22:37 3337人阅读 评论(0) 收藏
- 用 GDB 调试Linux程序及有用技巧
- zSeries 上的 Linux 应用程序调试技巧
- linux 多线程 最简单 例子 代码
- 用 GDB 调试Linux程序及有用技巧
- linux下的多线程调试(gdb)
- linux下gdb调试之简单命令使用(一)
- linux下编译C程序——gdb简单调试
- Linux中调试程序使用打印日志纠错的技巧
- linux驱动调试技巧:灌寄存器---------以mma7660为例
- Linux驱动编程 step-by-step (六) 用户地址检测 简单模块调试 以及一些杂项