我应该从哪里开始用“调试python程序?”;分段错误:11“;

我应该从哪里开始用“调试python程序?”;分段错误:11“;,python,debugging,segmentation-fault,Python,Debugging,Segmentation Fault,我有一个python脚本test.py 运行python test.py会给出一条简短的消息: Segmentation fault: 11 一般来说,我应该从哪里开始调试这样的问题?一般来说(并且没有代码的细节),最好的做法是开始将print语句放入测试脚本中,直到可以将问题缩小到导致segfault的一行。放入一堆print语句,并在开始缩小哪些print语句运行,哪些不运行时移动它们,因为它们位于segfault之后。如果您的Python脚本导致了分段错误,这通常意味着某些用C实现的Py

我有一个python脚本
test.py

运行
python test.py
会给出一条简短的消息:

Segmentation fault: 11

一般来说,我应该从哪里开始调试这样的问题?

一般来说(并且没有代码的细节),最好的做法是开始将print语句放入测试脚本中,直到可以将问题缩小到导致segfault的一行。放入一堆print语句,并在开始缩小哪些print语句运行,哪些不运行时移动它们,因为它们位于segfault之后。

如果您的Python脚本导致了分段错误,这通常意味着某些用C实现的Python模块出错。您应该能够使用
gdb
轻松辨别。尝试运行:

gdb `which python`
# This starts an interactive gdb session.  Type:
set args /path/to/python/script.py
r
# The program will now run.  Interact with it until the segfault occurs.  Then type:
bt

这将为您提供导致分段错误的c调用堆栈。(gdb可能会打印一条关于缺少调试符号的消息,并给您运行安装这些符号的命令。调试符号会给您提供更详细的堆栈跟踪,包括函数名和文件行号。)使用此信息可以更快地确定Python中的什么调用导致segfault。

我们需要代码帮助,但一般来说,您可以先将代码一分为二(注释掉大约一半,然后查看它是否复制,等等),直到您可以确定代码的哪一部分导致了错误。我赌的是一个有缺陷的编译扩展。