Rob*_*tts 5 core python-2.7 ubuntu-14.04
我有一个 Python 程序有时会由于“双重释放或损坏”错误而崩溃。我试图找出发生这种情况的地方(可能在我正在使用的众多库之一中),以便我可以防止它崩溃。为此,我启用了核心转储,现在我有一个可以使用的 Apport.crash文件。
这就是我被困的地方。如何将核心转储加载到 gdb 或其他可以让我看到任何可用堆栈跟踪信息的东西?
apport-retrace 看起来很棒,但不会加载,因为.crash文件中没有包:
ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutablePath
Run Code Online (Sandbox Code Playgroud)
我也不知道如何将它直接加载到 gdb 中。我已经尝试gdb /usr/bin/python <crashfile>过完整.crash文件、文件的“CoreDump”部分以及“CoreDump”部分的.crashbase64 解码版本。每次我收到此错误时:
<crashfile> is not a core dump: File format not recognized
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以在不需要包的情况下使用 apport-retrace 或者以 gdb 可以使用的方式从崩溃文件中提取核心转储?
事实证明,修改该.crash文件以允许 apport-retrace 打开它相当简单。我只需要添加
Package: python2.7
Run Code Online (Sandbox Code Playgroud)
到文件。为了更好地衡量,我还确保“ExecutablePath”适用于 Python:
ExecutablePath: /usr/bin/python2.7
Run Code Online (Sandbox Code Playgroud)
就我而言,可执行路径以前是一个不同的文件(特定于我的程序)。我不知道这一步是否真的有必要。
完成此操作后,我可以运行apport-retrace -g <crashfile>在 gdb 中打开它,然后用于bt提取堆栈跟踪。
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |