Python 3.3包含一个名为faulthandler
的模块,如果发生段错误,它会显示有用的回溯信息。 (对于3.3之前的Python版本,模块可以是obtained from PyPI。)
默认情况下,模块未启用。它启用如下:
import faulthandler
faulthandler.enable()
此功能非常有用。是否有任何特殊原因未默认启用?它对性能有任何负面影响吗?
答案 0 :(得分:20)
此功能非常有用。是不是有任何特殊原因 默认启用?它对性能有任何负面影响吗?
原因是faulthandler记得stderr的文件描述符,通常是fd 2.问题是fd 2可能变成别的东西,比如socket,pipe,一个重要文件等。没有可靠的方法来检测这种情况,因此在Python中默认不启用faulthandler更安全。
faulthandler在几乎所有情况下都是安全的,除非更换了由faulthandler存储的文件描述符。问题也在文档中描述: https://docs.python.org/dev/library/faulthandler.html#issue-with-file-descriptors
注意:我写过faulthandler。