我有一个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。

08-27 05:48