【问题标题】:Where should I start to debug a python program with "Segmentation fault: 11"我应该从哪里开始调试带有“分段错误:11”的python程序
【发布时间】:2015-12-17 18:04:38
【问题描述】:

我有一个 python 脚本test.py

运行python test.py 给出简短信息:

Segmentation fault: 11

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

【问题讨论】:

  • 我们需要代码来提供帮助,但一般情况下,您可以先将代码一分为二(注释掉大约一半,然后查看它是否重现等),直到您可以确定代码的哪一部分导致段错误。我赌的是一个有问题的编译扩展。

标签: python debugging segmentation-fault


【解决方案1】:

一般来说(并且没有具体的代码),最好的办法是开始将打印语句放入您的测试脚本,直到您可以将事情缩小到导致段错误的单行。放入一堆打印语句并移动它们,因为您开始缩小哪些打印语句运行,哪些不运行,因为它们在段错误之后。

【讨论】:

    【解决方案2】:

    如果您的 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中的什么调用导致了段错误。

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多