我有一种情况,在基于arm的yocto / poky linux系统上,线程有时会冻结c ++应用程序。它停止在clock_nanosleep系统调用内的某个位置。
我可以使用gcore生成核心文件并与gdb附加,但是它仅向我显示了调用堆栈的usermode部分,该部分在软件中断时结束。
是否有办法从coredump中找出线程在内核中的实际位置?
编辑:这是方法调用的代码。变量t在堆栈上。
do {
ret = clock_nanosleep(CLOCK_MONOTONIC, 0, &t, &t);
} while (ret == EINTR);
致谢
答案 0 :(得分:0)
不可能从用户空间获取内核调用堆栈。即使有可能,也几乎无法帮助您调试问题。
请确保您不小心在线程之间不共享传递给clock_nanosleep()的结构,处理并报告了函数返回的所有错误,使用了正确的时钟源(可能是CLOCK_MONOTONIC),并且如manual
中所述使用clock_nanosleep()