多进程的gdb和实际操作系统环境之间的确切区别是什么?

时间:2017-06-12 02:43:20

标签: linux multithreading gdb scheduled-tasks

我一直在调试多进程工作。在程序初始化时创建多个线程。我发现当我使用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的那一刻就改变了。

0 个答案:

没有答案