Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3902557
  • 博文数量: 534
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4800
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(534)

文章存档

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(253)

2006年(73)

分类: C/C++

2008-03-10 22:23:53

gdb来调式多线程, 真的不怎么好用, 不知道怎么让一个线程单步执行, 在当前调式的总只有一个线程. 在调式当前线程的时候其它线程就一直在运行, 不好控制. 自己也很不喜欢多线程调式, 通常都是将多线程程序想办法转换为单线程来调式, 把每个函数调式成功了再一起来运行. 在不就使用原始的print大法了.

------------------
下面来源:

要点是先运行程序,再attach线程号进行调试。
1。先运行你的主程序
2。使用ps查看你程序的线程号,或者在线程程序里打印出来
3。运行gdb,运行“attach 线程号”
4。info stack看运行到哪里了,设线程文件中的断点
5。跟踪调试
6。“detach 线程号”取消调试该线程

我试过,成败基本对半开。
------------------

怎么查看线程号:
To get info about threads:
   ps -eLf
   ps axms

When used with -L, the NLWP (number of threads) and LWP (thread ID)

------------------
core文件怎么产生:
[gan@localhost tmp]$ ulimit -a
core file size          (blocks, -c) 0
...
[gan@localhost tmp]$ ulimit -c unlimited
[gan@localhost tmp]$ ulimit -a
core file size          (blocks, -c) unlimited
...
[gan@localhost tmp]$ ./a.out
段错误 (core dumped)

在当前目录下就产生core.[pid]的core文件了.

-------------------
还需要注意: gcc -g 参数就可以使用gdb调式了,但如果就只给你一个执行文件, 调式也是没有办法的. 今天刚测试完把别人的机器上的该执行文件拿到自己机器上gdb, 原来gdb需要访问原文件.c文件来显示详细的代码信息的.
阅读(4885) | 评论(0) | 转发(0) |
0

上一篇:words study

下一篇:Bash 中的递归函数

给主人留下些什么吧!~~