开发者社区> 问答> 正文

诊断分段错误

解释器因为某个分段错误、总线错误、访问越界或其他致命错误而突然间奔溃。 你想获得Python堆栈信息,从而找出在发生错误的时候你的程序运行点。

展开
收起
哦哦喔 2020-04-17 18:17:57 3439 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    aulthandler会在Python代码执行出错的时候向你展示跟踪信息。 至少,它会告诉你出错时被调用的最顶级扩展函数是哪个。 在pdb和其他Python调试器的帮助下,你就能追根溯源找到错误所在的位置了。

    faulthandler不会告诉你任何C语言中的错误信息。 因此,你需要使用传统的C调试器,比如gdb。 不过,在faulthandler追踪信息可以让你去判断从哪里着手。 还要注意的是在C中某些类型的错误可能不太容易恢复。

    2020-04-19 20:53:45
    赞同 展开评论 打赏
  • faulthandler 模块能被用来帮你解决这个问题。 在你的程序中引入下列代码:
    
    import faulthandler
    faulthandler.enable()
    另外还可以像下面这样使用 -Xfaulthandler 来运行Python:
    
    bash % python3 -Xfaulthandler program.py
    最后,你可以设置 PYTHONFAULTHANDLER 环境变量。 开启faulthandler后,在C扩展中的致命错误会导致一个Python错误堆栈被打印出来。例如:
    
    Fatal Python error: Segmentation fault
    
    Current thread 0x00007fff71106cc0:
      File "example.py", line 6 in foo
      File "example.py", line 10 in bar
      File "example.py", line 14 in spam
      File "example.py", line 19 in <module>
    Segmentation fault
    尽管这个并不能告诉你C代码中哪里出错了,但是至少能告诉你Python里面哪里有错。
    
    2020-04-17 18:18:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
网络流量异常行为分析系统 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载