从系统调用内部生成调用栈

时间:2019-01-14 20:20:33

标签: c++ linux yocto

我有一种情况,在基于arm的yocto / poky linux系统上,线程有时会冻结c ++应用程序。它停止在clock_nanosleep系统调用内的某个位置。

我可以使用gcore生成核心文件并与gdb附加,但是它仅向我显示了调用堆栈的usermode部分,该部分在软件中断时结束。

是否有办法从coredump中找出线程在内核中的实际位置?

编辑:这是方法调用的代码。变量t在堆栈上。

do {
   ret = clock_nanosleep(CLOCK_MONOTONIC, 0,  &t, &t);
} while (ret == EINTR);

致谢

1 个答案:

答案 0 :(得分:0)

不可能从用户空间获取内核调用堆栈。即使有可能,也几乎无法帮助您调试问题。

请确保您不小心在线程之间不共享传递给clock_nanosleep()的结构,处理并报告了函数返回的所有错误,使用了正确的时钟源(可能是CLOCK_MONOTONIC),并且如manual

中所述使用clock_nanosleep()