如何定位Python脚本中Bus error的根源?
Python中Bus Error(核心转储失败)的排查方案
1. 先解决核心转储生成问题
Bus error提示core dumped但无文件,大概率是系统限制了核心转储大小:
- 临时设置核心转储无限制:运行
ulimit -c unlimited,再重新执行脚本,此时出错会生成core文件。 - 检查系统核心转储路径:查看
/proc/sys/kernel/core_pattern,如果路径被设置为|/usr/bin/apport之类的管道,可能会导致core文件被处理而不保存,可临时修改为core(echo core | sudo tee /proc/sys/kernel/core_pattern)。
2. 用GDB分析核心转储定位代码行
有core文件后,可直接定位出错位置:
- 启动GDB加载core文件:
gdb python3 core - 查看C栈回溯:输入
bt,找到涉及Python或torch/numpy的栈帧,能定位到出错的底层库调用。 - 查看Python层栈信息:如果GDB支持Python扩展,输入
py-bt可直接显示出错的Python代码行;若不支持,可安装对应版本的python3-dbg包,再重新生成core文件分析。
3. 无core文件时的代码定位方法
如果暂时无法生成core文件,用以下方式缩小范围:
- 手动添加执行日志:在关键代码段(比如怀疑的循环内外)插入日志,例如:
Bus error发生时,最后一条日志对应的就是出错前的执行位置。import logging logging.basicConfig(level=logging.INFO) # 循环内添加 for key in self.parameters.keys(): logging.info(f"Processing key {key} at line {__line__} in {__file__}") new = self.parameters[key]['x'].parameter self.parser.parameters[key]['x'].parameter = new.detach().clone() - 使用trace模块追踪执行:运行
python3 -m trace -t your_script.py,会打印每一行代码的执行记录,最后输出的行就是出错前的最后一行。 - 逐段注释排查:逐步注释掉非核心代码块,重新运行脚本,直到找到触发Bus error的代码段。
4. 针对可疑循环的专项排查
你提供的循环代码涉及Tensor的detach和clone,可从以下角度检查:
- 检查对象引用有效性:确认
self.parameters[key]['x'].parameter和self.parser.parameters[key]['x'].parameter是否为有效Tensor,是否存在某个对象已被销毁但仍被引用的情况(比如Tensor被del后还被赋值)。 - 监控内存变化:在循环内添加内存监控,排查是否有异常内存访问:
import psutil import torch process = psutil.Process() for key in self.parameters.keys(): # CPU内存监控 print(f"RSS memory: {process.memory_info().rss / 1024 / 1024:.2f} MB") # GPU内存监控(若用CUDA) if torch.cuda.is_available(): print(f"CUDA allocated: {torch.cuda.memory_allocated() / 1024 / 1024:.2f} MB") new = self.parameters[key]['x'].parameter self.parser.parameters[key]['x'].parameter = new.detach().clone() - 简化循环测试:单独提取这段循环,构造最小测试用例,看是否能复现Bus error,排除其他代码干扰。
5. 其他通用排查手段
- 更新依赖库:numpy、torch的旧版本可能存在内存bug,升级到稳定版(如torch≥1.13,numpy≥1.21)后重试。
- 用Valgrind检测内存错误:运行
valgrind --leak-check=full python3 your_script.py,虽然运行速度慢,但能精准检测内存越界、野指针等问题。 - 检查第三方C扩展:如果脚本使用了自定义C扩展或小众第三方库,排查这些模块是否存在内存管理问题。
内容的提问来源于stack exchange,提问作者kloop
相关产品推荐
相关产品推荐

