Segmentation fault: 11 是啥意思,如何解决? [复制]
Posted
技术标签:
【中文标题】Segmentation fault: 11 是啥意思,如何解决? [复制]【英文标题】:What does Segmentation fault: 11 mean and how do you fix it? [duplicate]Segmentation fault: 11 是什么意思,如何解决? [复制] 【发布时间】:2018-12-22 15:21:03 【问题描述】:我对 Python 还很陌生,我遇到了真正的麻烦,因为我遇到了这个 Segmentation fault: 11 错误。
这是一个每次都会产生此错误的简单代码示例:
import grequests
class Url(object):
pass
a = Url()
a.url = 'http://www.heroku.com'
a.result = 0
b = Url()
b.url = 'http://www.google.com'
b.result = 0
c = Url()
c.url = 'http://www.wordpress.com'
c.result = 0
urls = [a, b, c]
rs = (grequests.get(u.url) for i, u in enumerate(urls))
grequests.map(rs)
绝对奇怪的是,如果我将 urls = ... 行替换为:
urls = [a, b]
然后我没有收到错误,脚本运行正常。
如果我把它改成只是
urls = [c]
然后我也没有错误,脚本运行正常。
如果我将 c.url = ... 更改为
c.url = "http://yahoo.com"
然后将 urls = ... 还原为
urls = [a, b, c]
然后我确实得到了分段错误:11 错误。
虽然我不确定如何解决,但似乎是内存问题。
我已经为此困扰了好几天,所以任何帮助,无论多么小,都非常感谢。
作为参考,我使用的是 macOS High Sierra (10.13.5) 并使用 Brew 安装了 Python 3.7.0。
【问题讨论】:
如果你只使用[c]
呢?也许 wordpress 网站正在做一些奇怪的事情并且内存不足。
感谢您的关注。我在原帖中添加了对 cmets 的回复。
在 Linux python3.7 上为我工作,pip 安装了 certifi-2018.4.16 chardet-3.0.4 gevent-1.3.4 greenlet-0.4.13 grequests-0.3.0 idna-2.7 requests-2.19 .1 urllib3-1.23。鉴于 3.7 非常新,我怀疑它可能是相关的。 Segfault 听起来更像是一个库/ABI 问题而不是内存,但我不是低级问题的专家。恐怕我只有这些了。
@snakecharmerb 这是有用的东西。明天我将弄清楚如何在我的 Mac 上安装 Python 3.6,看看是否有帮助。
【参考方案1】:
分段错误(违规)是由无效的内存引用引起的。尝试访问当前进程不应访问的地址(也可能是缓冲区溢出或完全伪造或未初始化的指针)。通常它表示底层代码中的错误或二进制构建(链接)期间的问题。
这个问题不在于你的 Python 脚本,即使你可以通过修改你的 Python 代码来触发它。即使你用尽了模块或解释器本身使用的缓冲区,它仍然应该优雅地处理这种情况。
鉴于您的脚本,gevent
(grequests
的依赖项)或您的 Python(和/或其标准库的一部分)很可能会发生段错误(或者正在使用导致段错误的库) )。也许尝试重建它们?自您构建它们以来,您的系统在哪些方面发生了重大变化?也许他们正在尝试针对其他库而不是它们最初构建的库?
您还可以允许您的系统转储内核(我假设 MacOS 本质上是 BSD 可以做到that)并检查(将其加载到诸如 gdb 之类的调试器中)内核转储以查看究竟发生了什么崩溃以及发生了什么时间。
【讨论】:
以上是关于Segmentation fault: 11 是啥意思,如何解决? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
iOS 核心数据 - Segmentation Fault 11
C语言,下面打印出来的结果是Segmentation fault: 11
AH00052: child pid 25043 exit signal Segmentation fault (11)
Python Django httpd - 【注意】child pid XXXXX exit signal Segmentation fault(11)
apache error.log 中的“[notice] child pid XXXX exit signal Segmentation fault (11)” [关闭]