首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何调试Python分段故障?

如何调试Python分段故障?
EN

Stack Overflow用户
提问于 2013-05-24 16:56:18
回答 5查看 93.8K关注 0票数 83

如何调试Python分段错误?

我们正尝试在SuSE 12.3上运行我们的python代码。我们得到了可重复的分割错误。python代码多年来一直在没有分段错误的其他平台上工作。

我们只编写Python代码,没有C扩展....

调试这个问题的最佳方法是什么?我知道一点英文,但那是十年前的事了.

Python 2.7.5

更新

解释器关闭时发生分段故障。

我可以多次运行该脚本:

代码语言:javascript
复制
python -m pdb myscript.py arg1 arg1
continue
run
continue
run

但是,如果我使用ctrl-d离开pdb,就会出现分段错误。

更新2

我现在尝试用gdb来调试它:

代码语言:javascript
复制
gdb 
> file python
> run myscript.py arg1 arg2
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefbe2700 (LWP 15483)]
0x00007ffff7aef93c in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
(gdb) bt
#0  0x00007ffff7aef93c in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
#1  0x00007ffff7af5303 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.7.so.1.0
#2  0x00007ffff7adc858 in ?? () from /usr/lib64/libpython2.7.so.1.0
#3  0x00007ffff7ad840d in PyObject_Call () from /usr/lib64/libpython2.7.so.1.0
#4  0x00007ffff7af1082 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
#5  0x00007ffff7af233d in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
#6  0x00007ffff7af233d in PyEval_EvalFrameEx () from /usr/lib64/libpython2.7.so.1.0
#7  0x00007ffff7af5303 in PyEval_EvalCodeEx () from /usr/lib64/libpython2.7.so.1.0
#8  0x00007ffff7adc5b6 in ?? () from /usr/lib64/libpython2.7.so.1.0
#9  0x00007ffff7ad840d in PyObject_Call () from /usr/lib64/libpython2.7.so.1.0
#10 0x00007ffff7ad9171 in ?? () from /usr/lib64/libpython2.7.so.1.0
#11 0x00007ffff7ad840d in PyObject_Call () from /usr/lib64/libpython2.7.so.1.0
#12 0x00007ffff7aeeb62 in PyEval_CallObjectWithKeywords () from /usr/lib64/libpython2.7.so.1.0
#13 0x00007ffff7acc757 in ?? () from /usr/lib64/libpython2.7.so.1.0
#14 0x00007ffff7828e0f in start_thread () from /lib64/libpthread.so.0
#15 0x00007ffff755c7dd in clone () from /lib64/libc.so.6

更新3

我从http://hg.python.org/cpython/file/default/Misc/gdbinit安装了gdbinit,从http://download.opensuse.org/debug/distribution/12.3/repo/oss/suse/x86_64/安装了调试符号

代码语言:javascript
复制
(gdb) pystack
No symbol "_PyUnicode_AsString" in current context.

现在怎么办?

python更新4RPM我们安装了一个新的(-2.7.5-3.1.x86_64)。我们得到的片段错误较少,但它们仍然会发生。以下是存储库的链接:

http://download.opensuse.org/repositories/devel:/languages:/python:/Factory/openSUSE_12.3/x86_64/

更新5解决了我最初的问题:

这是http://bugs.python.org/issue1856 (关闭(退出)可以挂起或段故障与守护程序线程运行)

相关:Detect Interpreter shut down in daemon thread

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-01-17 22:23:54

我提出这个问题是因为Segmentation fault,但不是在退出时,只是在一般情况下,我发现没有什么比faulthandler更有效了。它是Python3.3的一部分,你可以使用pip在2.7中安装。

票数 61
EN

Stack Overflow用户

发布于 2019-11-13 03:50:18

适用于python3用户的tl;dr。

首先,从文档中:

faulthandler是自Python3.3以来的内置模块

代码用法:

代码语言:javascript
复制
import faulthandler

faulthandler.enable()
// bad code goes here

Shell用法:

代码语言:javascript
复制
$ python3 -q -X faulthandler
>>> /// bad cod goes here
票数 38
EN

Stack Overflow用户

发布于 2013-08-07 15:04:36

也许有一个守护线程在运行?有一个可重现的bug,它只在3.x中修复,而不是在2.x中修复:

http://bugs.python.org/issue1856

代码语言:javascript
复制
shutdown (exit) can hang or segfault with daemon threads running

这是我自己问题的答案。花了一些时间才找到问题的根源。

下面是下一个问题:如何解决这个bug:Detect Interpreter shut down in daemon thread

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16731115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档