我有一个Python程序,有时由于“双重释放或损坏”错误而崩溃。我试图弄清楚这是哪里发生的(可能在我正在使用的许多库之一中),以便可以防止它崩溃。为此,我启用了核心转储,现在有一个Apport .crash
文件可以使用。
这就是我卡住的地方。如何将核心转储加载到gdb或其他可以让我看到可用的stacktrace信息的东西?
apport-retrace看起来不错,但是由于.crash
文件中没有包,因此无法加载:
ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutablePath
我也想不出如何直接将其加载到gdb中。我已经在完整的
gdb /usr/bin/python <crashfile>
文件上,在.crash
文件的“ CoreDump”部分上以及在“ CoreDump”部分的base64解码版本上尝试了.crash
。每次遇到此错误时:<crashfile> is not a core dump: File format not recognized
有没有一种方法可以我不需要包就使用apport-retrace或以gdb可以使用的方式将核心转储从崩溃文件中拉出?
最佳答案
事实证明,修改.crash
文件以允许apport-retrace打开它非常简单。我只需要添加
Package: python2.7
到文件。为了达到良好的效果,我还确保“ ExecutablePath”适用于Python:
ExecutablePath: /usr/bin/python2.7
就我而言,可执行路径以前是一个不同的文件(一个特定于我的程序的文件)。我不知道此步骤是否确实必要。
完成此操作后,我可以运行
apport-retrace -g <crashfile>
在gdb中将其打开,然后使用bt
提取stacktrace。