儘管 Python 很穩定,但應用程式偶爾會遇到死鎖或意外凍結。確定這些問題的根本原因可能具有挑戰性。
要深入了解正在運行的 Python 程式的當前狀態,一個有用的工具是「即時」堆疊追蹤。這使您可以檢查正在執行的確切程式碼,從而可能找出任何問題的根源。
可以使用模組來啟用動態堆疊追蹤- 飛行堆疊追蹤檢查。此模組僅在Unix 系統上運作並使用訊號:
<code class="python">import code, traceback, signal def debug(sig, frame): d={'_frame':frame} d.update(frame.f_globals) d.update(frame.f_locals) i = code.InteractiveConsole(d) message = "Signal received : entering python shell.\nTraceback:\n" message += ''.join(traceback.format_stack(frame)) i.interact(message) def listen(): signal.signal(signal.SIGUSR1, debug)</code>
要使用此模組,只需在程式初始化期間呼叫listen():
<code class="python">listen()</code>
當程式遇到問題時,使用kill或在Python中傳送SIGUSR1訊號:
<code class="python">os.kill(pid, signal.SIGUSR1)</code>
這將中斷程式並在執行點開啟互動式Python控制台。您可以檢查堆疊追蹤並探索變數來確定問題的原因。
請注意,觸發訊號時,此方法可能會中斷 I/O 操作。
要進行更廣泛的調試,可以使用單獨的腳本透過管道建立通信,從而啟用後台進程的調試。
以上是如何動態顯示即時 Python 應用程式的堆疊追蹤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!