gdb来调式多线程(转)

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

------------------
下面来源: http://book.77169.org/ask30/how210438.htm

要点是先运行程序,再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文件来显示详细的代码信息的.

posted @ 2008-11-12 09:29  alex_lin  阅读(1210)  评论(0编辑  收藏  举报