Python解释器segfau

2024-06-25 23:56:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个奇怪的问题,当我运行python shell时:

$ python3

Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello') # Error appears for any command in shell

[1]    9021 segmentation fault  python3

但当我运行python3 hello.py时,它就起作用了。在

我已经尝试过python2.7、python3.4和python3.5,但得到了相同的错误。在

OS Debian 8.4版

更新1

日志输出:

^{pr2}$

更新2

问题仍然没有解决,但是我发现如果我以另一个用户的身份运行它,它可以正常工作。我已经尝试删除.cache和一些与python相关的目录(.jupyter, .ipython),但是没有结果。在

更新3

GDB输出

gdb python
GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from python...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/python 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello")


Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) 
(gdb) backtrace
#0  0x0000000000000000 in ?? ()
#1  0x00007ffff694892e in rl_callback_read_char () from /lib/x86_64-linux-gnu/libreadline.so.6
#2  0x00007ffff6b67cd5 in ?? () from /usr/lib/python2.7/lib-dynload/readline.x86_64-linux-gnu.so
#3  0x0000000000449d88 in PyOS_Readline ()
#4  0x0000000000422d2a in ?? ()
#5  0x00000000004c4e8a in ?? ()
#6  0x00000000004c460e in PyParser_ASTFromFile ()
#7  0x0000000000449b11 in PyRun_InteractiveOneFlags ()
#8  0x0000000000449937 in PyRun_InteractiveLoopFlags ()
#9  0x000000000042d96b in ?? ()
#10 0x00000000004982f2 in Py_Main ()
#11 0x00007ffff6f12b45 in __libc_start_main (main=0x497d80 <main>, argc=1, argv=0x7fffffffe748, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe738) at libc-start.c:287
#12 0x0000000000497ca0 in _start ()
(gdb) 

更新4

对以下操作进行Strace调试:

python
Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello")

[1]    17271 segmentation fault  python

和strace log:

 strace -p 17271
Process 17271 attached
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], 0}, 8) = 0
read(0, "p", 1)                         = 1
write(1, "p", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "r", 1)                         = 1
write(1, "r", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "i", 1)                         = 1
write(1, "i", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "n", 1)                         = 1
write(1, "n", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "t", 1)                         = 1
write(1, "t", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "(", 1)                         = 1
write(1, "(", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, ")", 1)                         = 1
write(1, ")", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\33", 1)                       = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "[", 1)                         = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "D", 1)                         = 1
write(1, "\10", 1)                      = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\"", 1)                        = 1
write(1, "\")\10", 3)                   = 3
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\"", 1)                        = 1
write(1, "\")\10", 3)                   = 3
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\33", 1)                       = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "[", 1)                         = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "D", 1)                         = 1
write(1, "\10", 1)                      = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "H", 1)                         = 1
write(1, "H\")\10\10", 5)               = 5
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "e", 1)                         = 1
write(1, "e\")\10\10", 5)               = 5
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "l", 1)                         = 1
write(1, "l\")\10\10", 5)               = 5
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "l", 1)                         = 1
write(1, "l\")\10\10", 5)               = 5
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "o", 1)                         = 1
write(1, "o\")\10\10", 5)               = 5
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\r", 1)                        = 1
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, NULL, NULL)        = 1 (in [0])
rt_sigaction(SIGWINCH, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, 8) = 0
read(0, "\r", 1)                        = 1
write(1, "\n", 1)                       = 1
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(0, SNDCTL_TMR_STOP or SNDRV_TIMER_IOCTL_GINFO or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
rt_sigaction(SIGWINCH, {SIG_DFL, [], SA_RESTORER, 0x7fd9005a58d0}, {0x7fd8ff2f8270, [], SA_RESTORER|SA_RESTART, 0x7fd9005a58d0}, 8) = 0
select(1, [0], NULL, [0], {0, 500000})  = 0 (Timeout)
write(1, "\n", 1)                       = 1
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
+++ killed by SIGSEGV +++

更新5

环境变量diff(适用于root用户):

Environmental variables diff

更新6

作为普通用户:

ldd /usr/bin/python
    linux-vdso.so.1 (0x00007ffcb1648000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f316da1d000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f316d815000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f316d60d000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f316d3ed000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f316d0e5000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f316cd35000)
    /lib64/ld-linux-x86-64.so.2 (0x000055ca7cb3e000)

作为根目录:

ldd /usr/bin/python
    linux-vdso.so.1 (0x00007fffc8ef0000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f79bf425000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f79bf21d000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f79bf015000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f79bedf5000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f79beaed000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f79be73d000)
    /lib64/ld-linux-x86-64.so.2 (0x00005600afb99000)

Tags: ingnureadlinuxsaselectnullx86
2条回答

因此,经过一些调试(虽然注释现在看起来更像是聊天,但它们可以作为调试会话的一个示例)后,发现segfault是由于readline设置的某些问题而发生的,即用户特定的~/.inputrc配置文件(我要说,它可能是一个readline错误,因为无论配置是什么,都不应该出现故障)。在

这说明了我们的软件是多么的复杂和脆弱,因为乍一看,python可能会以这种方式崩溃,因为一个库的配置文件损坏了,很多人甚至不记得python使用过(如果他们甚至记得它存在的话)。在

分割错误有很多原因。在

例如:

  • 内存不足
  • Ram存储器故障
  • 获取比交换内存更大的数据
  • 小车代码
  • 多重递归

因为你只是想打印一些东西,我会说这可能是原因1或2。在

相关问题 更多 >