新聞中心
faulthandler —— 轉(zhuǎn)儲 python 的跟蹤信息
3.3 新版功能.

鎮(zhèn)沅ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
當故障、超時或收到用戶信號時,利用本模塊內(nèi)的函數(shù)可轉(zhuǎn)儲 Python 跟蹤信息。調(diào)用 faulthandler.enable() 可安裝 SIGSEGV 、 SIGFPE 、 SIGABRT 、 SIGBUS 和 SIGILL 信號的故障處理程序。通過設置 PYTHONFAULTHANDLER 環(huán)境變量或 -X faulthandler 命令行參數(shù),還可以在啟動時開啟這些設置。
故障處理程序與操作系統(tǒng)的故障處理程序兼容,比如 Apport 或 Windows 故障處理程序等。如果 sigaltstack() 函數(shù)可用,本模塊將為信號處理程序使用備用堆棧。這樣即便堆棧溢出也能轉(zhuǎn)儲跟蹤信息。
故障處理程序?qū)⒃跒碾y性場合調(diào)用,因此只能使用信號安全的函數(shù)(比如不能在堆上分配內(nèi)存)。由于這一限制,與正常的 Python 跟蹤相比,轉(zhuǎn)儲量是最小的。
-
只支持 ASCII 碼。編碼時會用到
backslashreplace錯誤處理程序。 -
每個字符串限制在 500 個字符以內(nèi)。
-
只會顯式文件名、函數(shù)名和行號。(不顯示源代碼)
-
上限是 100 頁內(nèi)存幀和 100 個線程。
-
反序排列:最近的調(diào)用最先顯示。
默認情況下,Python 的跟蹤信息會寫入 sys.stderr。為了能看到跟蹤信息,應用程序必須運行于終端中。日志文件也可以傳給 faulthandler.enable()。
本模塊是用 C 語言實現(xiàn)的,所以才能在崩潰或 Python 死鎖時轉(zhuǎn)儲跟蹤信息。
在 Python 啟動時, Python 開發(fā)模式 會調(diào)用 faulthandler.enable()。
轉(zhuǎn)儲跟蹤信息
faulthandler.dump_traceback(file=sys.stderr, all_threads=True)
將所有線程的跟蹤數(shù)據(jù)轉(zhuǎn)儲到 file 中。如果 all_threads 為 False,則只轉(zhuǎn)儲當前線程。
在 3.5 版更改: 增加了向本函數(shù)傳入文件描述符的支持。
故障處理程序的狀態(tài)
faulthandler.enable(file=sys.stderr, all_threads=True)
啟用故障處理程序:為 SIGSEGV 、 SIGFPE 、 SIGABRT 、 SIGBUS 和 SIGILL 信號安裝處理程序,以轉(zhuǎn)儲 Python 跟蹤信息。如果 all_threads 為 True,則會為每個運行中的線程生成跟蹤信息。否則只轉(zhuǎn)儲當前線程。
file 必須保持打開狀態(tài),直至停用故障處理程序為止:參見 文件描述符相關話題。
在 3.5 版更改: 增加了向本函數(shù)傳入文件描述符的支持。
在 3.6 版更改: 在 Windows 系統(tǒng)中,同時會安裝一個 Windows 異常處理程序。
在 3.10 版更改: 現(xiàn)在如果 all_threads 為 True,則轉(zhuǎn)儲信息會包含垃圾收集器是否正在運行。
faulthandler.disable()
停用故障處理程序:卸載由 enable() 安裝的信號處理程序。
faulthandler.is_enabled()
檢查故障處理程序是否被啟用。
一定時間后轉(zhuǎn)儲跟蹤數(shù)據(jù)。
faulthandler.dump_traceback_later(timeout, repeat=False, file=sys.stderr, exit=False)
在 timeout 秒超時后,轉(zhuǎn)儲所有線程的跟蹤信息,如果 repeat 為 True,則每隔 timeout 秒轉(zhuǎn)儲一次。如果 exit 為 True,則在轉(zhuǎn)儲跟蹤信息后調(diào)用 _exit(),參數(shù) status=1。請注意, _exit() 會立即關閉進程,這意味著不做任何清理工作,如刷新文件緩沖區(qū)等。如果調(diào)用兩次函數(shù),則新的調(diào)用將取代之前的參數(shù),超時時間也會重置。計時器的精度為亞秒級。
file 必須保持打開狀態(tài),直至跟蹤信息轉(zhuǎn)儲完畢,或調(diào)用了 cancel_dump_traceback_later() :參見 文件描述符相關話題。
本函數(shù)用一個看門狗線程實現(xiàn)。
在 3.7 版更改: 該函數(shù)現(xiàn)在總是可用。
在 3.5 版更改: 增加了向本函數(shù)傳入文件描述符的支持。
faulthandler.cancel_dump_traceback_later()
取消 dump_traceback_later() 的最后一次調(diào)用。
轉(zhuǎn)儲用戶信號的跟蹤信息。
faulthandler.register(signum, file=sys.stderr, all_threads=True, chain=False)
注冊一個用戶信號:為 signum 信號安裝一個處理程序,將所有線程或當前線程(all_threads 為 False 時)的跟蹤信息轉(zhuǎn)儲到 file 中。如果 chain 為 True,則調(diào)用上一層處理程序。
file 必須保持打開狀態(tài),直至該信號被 unregister() 注銷:參見 文件描述符相關話題。
Windows 中不可用。
在 3.5 版更改: 增加了向本函數(shù)傳入文件描述符的支持。
faulthandler.unregister(signum)
注銷一個用戶信號:卸載由 register() 安裝的 signum 信號處理程序。如果信號已注冊,返回 True,否則返回 False。
Windows 中不可用。
文件描述符相關話題
enable() 、 dump_traceback_later() 和 register() 保留其 file 參數(shù)給出的文件描述符。 如果文件關閉,文件描述符將被一個新文件重新使用;或者用 os.dup2() 替換了文件描述符,則跟蹤信息將被寫入另一個文件。 每次文件被替換時,都會再次調(diào)用這些函數(shù)。
示例
在 Linux 中啟用和停用內(nèi)存段故障的默認處理程序:
$ Python3 -c "import ctypes; ctypes.string_at(0)"Segmentation fault$ python3 -q -X faulthandler>>> import ctypes>>> ctypes.string_at(0)Fatal Python error: Segmentation faultCurrent thread 0x00007fb899f39700 (most recent call first):File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_atFile "", line 1 in Segmentation fault
網(wǎng)頁名稱:創(chuàng)新互聯(lián)Python教程:faulthandler——轉(zhuǎn)儲Python的跟蹤信息
文章網(wǎng)址:http://m.5511xx.com/article/codsdss.html


咨詢
建站咨詢
