gpt4 book ai didi

python 崩溃了;如何解码 dmesg 日志中的段错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:41 26 4
gpt4 key购买 nike

我有一个在 64 位 Linux 机器上运行的 Python 守护进程。它正在崩溃。不是一种友好的、易于调试的、Python 异常堆栈跟踪类型的崩溃,或者——这是一个段错误。 Linux 的 dmesg 日志有一个简洁的事后分析:

python2.7[27509]: segfault at 7fe500000008 ip 00007fe56644a891 sp 00007fe54e1fa230 error 4 in libpython2.7.so.1.0[7fe566359000+193000]
python2.7[23517]: segfault at 7f5600000008 ip 00007f568bb45891 sp 00007f5678e55230 error 4 in libpython2.7.so.1.0[7f568ba54000+193000]

libpython2.7.so.1.0 在这个系统上有符号,我可以运行 objdump -d 来获取汇编语言转储。所以我很想知道是哪个函数导致了段错误。

我如何解码这些 dmesg 段错误通知之一并找到错误的函数? 一行显示“7fe566359000+193000”,下一行显示“7f568ba54000+193000”。我猜这意味着两个段错误都来自同一位置。 193000 = 0x2f1e8。我认为 0x2f1e8 会导致 Python 库程序集转储中的一条指令,但事实并非如此; 0x2f1e8 完全超出反汇编范围。

最佳答案

这是库加载的基地址,所以你应该将它与 .text 的加载地址进行比较,如(例如)eu-readelf:

flame@saladin ~ % eu-readelf -S /usr/lib/libpython2.7.so
There are 25 section headers, starting at offset 0x1b1a80:

Section Headers:
[Nr] Name Type Addr Off Size ES Flags Lk Inf Al
[ 0] NULL 0000000000000000 00000000 00000000 0 0 0 0
[….]
[10] .text PROGBITS 000000000003f220 0003f220 000e02a0 0 AX 0 0 16
[….]

你应该能够做的是使用你通过 addr2line 工具获得的地址:

addr2line -e /usr/lib/libpython2.7.so 0x6e408

在这种情况下,我无法获取数据,因为我的库副本与您的不同,所以地址没有意义。

当然,除非您有核心文件,否则您仍然无法获得完整的回溯。

关于 python 崩溃了;如何解码 dmesg 日志中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com