调试c++多线程程序不知如何入手,请问如何调试多线程程序?
gdb有thread相关命令,如info thread(简写成info th)
显示线程消息,b xx thread yy
可以针对某个thread设置断点,thread xx(简写成thr xx)
切换到某个thread。
再配合frame(简写f)相关的命令(比如up
,down
在不同frame间跳转),基本可以处理若干个不同的线程间的debug……
其他的debugger,应该也会有同样的功能。
不过如果用的线程比较多的话……建议还是写一些辅助函数,在debug过程中打印出tid,然后对比一些蹊跷的地方,效果会更好。
先说说在Linux上用gdb调试多线程
首先用g++ 加上-g选项编译你的程序。大概像这样
g++ -g sourcecode.cpp -o mt
然后用gdb加载你的程序
gdb ./mt
在gdb中用b命令设置你的断点。有两种方式
第一种,b 文件名:行号
b sourcecode.cpp:15
第二种,b 函数名
b main
在gdb中用r命令运行你的程序。
当程序运行到你的断点,或者遇到异常之后,程序会停止,你就可以用gdb命令查看程序的状态。
info thread 查看所有的线程信息。每一行一个线程,开头的数字代表线程号。
切换到具体线程
thread 进程号
查看线程的堆栈信息
bt
如果嫌gdb麻烦,可以在函数中打log
打印日志,日志中加上线程ID