core dumped (python) 问题分析和解决办法

core dumped (python) 问题分析和解决办法coredumped是什么?核心转储,core是cpu,很好理解

core dumped 是什么?

核心转储,core是cpu,很好理解。dumped:垃圾场,丢弃,(转储是意译)。说明进程运行出错,就是把cpu无法继续运行该进程,机器脑中的垃圾不能一直保留,要丢掉。为了搞清楚为啥出错,这堆cpu丢掉的垃圾是分析的关键。比分析垃圾更关键的是,分析cpu在什么时候(代码片段)出的问题,完成core dumped 的代码定位,就可以下一步调试解决。

core dumped 如何定位?

网上往往给出的是解决的具体办法,而不是定位分析的通用方式。这里,我们采用gdb对python程序中 core dumped 问题进行定位。就是将python程序运行在gdp创造的监视环境下,能够清晰反馈出程序执行的过程。wiki.python.org给出了如何使用gdb对python程序进行调试的两种方法

  1. 启动python之前使用gdb,这种方法对conda环境的python依然有效果哦!
$ gdb python
...
(gdb) run <programname>.py <arguments>
  1. 启动python后使用gdb, 我这里感觉不是很好用,没有第一种好
$ gdb python <pid of running process>

我选择第一种方式成功在gdb的环境下让python运行起来了,程序出错(车祸),gdb立马封锁现场。用这种方式就可以定位到core dumped的位置了。

core dumped 如何解决?

在gdb的环境下,python程序顺利启动。core dumped 这个错误一般会重现。gdb就会在cpu的车祸现场拍下足够的照片,不急着将垃圾dump到垃圾场,等着伟大的程序员去现场勘探。位置分析重要的手段是 bt(backtrace)(列出调用栈)。然后就可以分析出错误的大致原因了,详情见下面的例子。

例子

在这里插入图片描述

  • 问题出在显卡驱动的调用上,线程号也给出来了,调用显卡驱动的是_glDeleteTextures()函数,这个texture给我很强的暗示;
  • 进一步backtrace,发现是mujoco中间释放Context导致的;
  • 结合我自己的代码,实际是使用robosuite的domain random的wrapper的时候才有问题,又不得不用这个wrapper,结合上述分析,我们将wrapper中texture的DR选项关闭,重新测试,代码又可以飞起来了。

总结:gdb代码调试神器,上古利器(1986年),高端程序员必备。 愿你我程序无bug。

今天的文章core dumped (python) 问题分析和解决办法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60448.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注