当前位置:Gxlcms > 数据库问题 > gdb调试多线程的简单命令

gdb调试多线程的简单命令

时间:2021-07-01 10:21:17 帮助过:45人阅读

void *thread1(void *arg) 2{ 3 printf("New thread1\n"); 4 return NULL; 5} 6void *thread2(void *arg) 7{ 8 printf("New thread2:\n"); 9 return NULL; 10} 11int main(void) 12{ 13 int err; 14 pthread_t tid1,tid2,tid3; 15 16if(pthread_create(&tid1,NULL,thread1,NULL) < 0) 17 { 18 printf("线程1创建失败\n"); 19 exit(1); 20 } 21 22if(pthread_create(&tid2,NULL,thread2,NULL) < 0) 23 { 24 printf("线程2创建失败\n"); 25 exit(1); 26 } 27if(pthread_create(&tid3,NULL,thread2,NULL) < 0) 28 { 29 printf("线程3创建失败\n"); 30 exit(1); 31 } 32 printf("Run main thread:"); 33 sleep(2000); 34 return 0; 35}

2.调试命令

首先设置三个断点让4个线程运行到对应的位置都停止运行具体操作见下图
技术分享
其中图中断点22,28,54,对应测试代码的3,8,32

1.info threads
功能:显示当前可调试的所有线程,并且gdb会为每个线程分配一个ID(不是线程ID),我们之后的操作可以根据这个ID来确定操作哪个线程具体操作见下图

技术分享
如上图所示ID1,2,3分别是gdb给予每个线程的新ID,我们之后操作线程就用它,ID为2的线程前面的*表示当前调试的线程为此线程
2.thread ID
调试目标ID指定的线程
技术分享
3.set scheduler-locking [off|on|step]
在调试多线程程序时,默认除了被调试的线程在执行外,其他线程也都在运行,我们可以通过命令来控制这一切:off表示不锁定任何线程on表示只有当前调试的线程会继续运行,step表示在但不执行时只有当前线程会运行
技术分享

3.总结

在用gdb调试多线程时,首先我们可以用info threads命令来查看可调时的线程,并获取其ID,接着调用thread ID来切到我们想要调试的线程,最后通过set scheduler-locking [参数]
来控制我们希望的线程运行方式

版权声明:本文为博主原创文章,未经博主允许不得转载。

gdb调试多线程的简单命令

标签:多线程   bug   调试   gdb   线程   

人气教程排行