如何在 Docker 容器中调试段错误?

4
我正在容器中运行ESLint - 用于javascript文件的linter: https://github.com/codeclimate/codeclimate-eslint 该程序运行ESLint cli analyze命令,并将要分析的代码目录作为容器中挂载的卷提供。
该程序捕获ESLint结果并重新格式化它们,然后重新输出到STDOUT。
通常情况下,这很好用,但在单个文件中存在非常多的问题(例如缩小的文件)时,该过程会segfaults。唯一提供的错误是: Segmentation fault 由于在同一代码库上本地运行ESLint不会出现此问题,因此我认为原因与容器有关。
我已经尝试显着增加容器上的内存和--ulimit,但并没有成功。我也做了一些谷歌搜索,但没有找到类似的特定案例。
对于调试此问题的良好下一步想法吗?
谢谢!

我在类似的情况下遇到了相同的错误:你最近有改进吗?你认为问题是与内存相关的吗?你最终是否使用建议的gdb进行了调试?谢谢。 - Augustin Riedinger
1个回答

2

您可以通过在启动应用程序的脚本中运行ulimit -c unlimited来允许核心文件。然后,您可以使用调试器(例如 gdb)处理核心文件以查找 segfault 的原因。要从已停止的容器中获取核心文件,可以使用docker cp $container_id:/path/to/core /host/destination/core命令。


谢谢!由于我正在运行节点进程,我开始尝试使用 https://github.com/ddopson/node-segfault-handler 进行实验。最终,我们团队中的某个人发现,从alpine切换到另一个node基础镜像可以改善该工具处理大量STDOUT的能力。https://github.com/codeclimate/codeclimate-eslint/pull/119/files - abaldwinhunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接