首页 > 解决方案 > docker中cmp指令的python解释器分段错误

问题描述

我在 docker 环境中运行 python 脚本,运行几个小时后,我在 python3 上遇到了分段错误和核心转储。我使用 gdb 分析核心,似乎核心转储的最后一帧在__GI___select select.c:41. 其他帧只是??()_PyEval_EvalFrameDefault()

我尝试反汇编最后一帧,它显示崩溃发生在 上=> 0x00007ff212080ff7 <+23>: cmp $0xfffffffffffff000,%rax,它尝试将 select syscall 返回值与 -4096 进行比较,以确定它们是否应该将负部分移动到 errno。该指令不应导致任何段错误,因为没有内存访问。

$rax 的值是-514 (ERESTARTNOHAND),看起来很实用。

根据日志,损坏似乎发生在我的 try 块上subprocess.run(arg_test, timeout=5)

我原本以为是栈大小有限造成的,但是在将 stack ulimit 设置为 262144 kb 后我遇到了同样的问题

谁能告诉我我想如何调试这种问题?太感谢了

- - - - - - - - - - 编辑 - - - - - - - - - - - -

崩溃位置似乎是随机的,我在 的 处发现了另一个崩溃=> 0x00007f50813c31cc <+108>: cmp $0xfffffffffffff000,%rax,而的__GI___sigtimedwait值为。$rax-11

我不明白这条指令如何导致分段错误。

标签: pythondockersegmentation-fault

解决方案


推荐阅读