我一直在调试多进程工作。在程序初始化时创建多个线程。我发现当我使用gdb进行调试时,线程都可以成功设置,但是当我直接在linux环境中执行程序时,它会在部分线程被创建后停留。我认为它必须是线程睡眠和唤醒之间的一些调度问题,但还没有想出来......
尽管gdb可以成功创建线程,但是在线程自杀后,它会在glibc函数中退出并出现意外的分段错误:
res_thread_freeres () at res_init.c:642
642 if (_res.nscount == 0)
这也很奇怪,因为我可以检查_res.nscount的值,它肯定没有溢出。
那么..有没有人知道实际的操作系统和gdb调试环境之间的执行差异?谢谢!
更新: 我找到了将pthread设置为SCHED_FIFO的问题,在我删除它之后,它运行正常。但我仍然不知道为什么程序在gdb环境中工作正常。实际上程序的线程状态在附加到gdb的那一刻就改变了。