我有一个Python程序,它有时会因为“双重免费或损坏”错误而崩溃。我正在试图找出这种情况发生在哪里(可能是在我使用的众多库中的一个),这样我就可以防止它崩溃。为此,我启用了核心转储,现在可以使用Apport .crash文件了。
我被困在这里了。如何将核心转储加载到gdb或其他可以让我查看任何可用堆栈跟踪信息的东西?
apport似乎很棒,但不会加载,因为.crash文件中没有包:
ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutablePath我也想不出如何将它直接加载到gdb中。我已经在完整的gdb /usr/bin/python <crashfile>文件上,在.crash文件的"CoreDump“部分,以及在base64 64解码版本的"CoreDump”部分上尝试了.crash。每次我得到这个错误:
<crashfile> is not a core dump: File format not recognized有没有一种不需要包就可以使用apport或者以gdb可以使用的方式从崩溃文件中提取核心转储的方法?
发布于 2015-04-13 17:34:54
事实证明,修改.crash文件以允许apport打开它是相当简单的。我只需要加上
Package: python2.7到档案里。为了更好地衡量,我还确保了"ExecutablePath“是用于Python的:
ExecutablePath: /usr/bin/python2.7在我的例子中,可执行路径以前是一个不同的文件(一个特定于我的程序)。我不知道这一步是否真的有必要。
完成此操作后,我可以运行apport-retrace -g <crashfile>在gdb中打开它,然后使用bt提取堆栈跟踪。
https://stackoverflow.com/questions/29571866
复制相似问题