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文件来显示详细的代码信息的.