首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试Linux进程挂起,它正在运行哪些代码?

调试Linux进程挂起,它正在运行哪些代码?
EN

Stack Overflow用户
提问于 2019-09-20 01:37:11
回答 1查看 697关注 0票数 2

我有一个进程运行在一个非常弱的Linux嵌入式设备上,它无法在其自身上运行gdb / gdb服务器。我让它多次从共享库中触发一个函数X(还有其他一些进程同时调用它的频率要低得多),它通常在共享库中挂起1天或半天之后。如何调试:

  • ,万一它阻塞了什么地方:它运行的最后一行代码是哪一行?如果它陷入无限循环,
  • :它运行的代码行是什么?

我试过的是:

  • ,我深入到共享库中,并在其中放置了大量syslog来检查。但是,随着大量的syslog不断被调用,我的进程现在每2-5分钟挂起一次。我认为syslog被UNIX socket?

阻塞了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 02:27:31

gdb附带了一个名为gcore的程序,它将从正在运行的过程中生成一个核心文件。

现在许多系统默认禁用核心文件( shell中的ulimit -c将显示0)。使用ulimit -c unlimited shell命令,然后在同一个shell中运行您的进程(这些限制是从父进程继承的)。如果您以其他方式启动您的进程,而不是直接从shell开始,您将需要了解如何将它们设置在那里。例如,系统单元文件中的LimitCORE= )。

一旦您的进程进入坏状态,在其进程ID上运行gcore,然后您可以将它复制到您的工作站并将其加载到gdb (gdb <executable> <core-file>)中。然后,可以查看堆栈跟踪和核心转储开始时的其他状态。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58020708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档