簡體   English   中英

調試:如何檢查我的Python程序掛在哪里?

[英]debugging: how to check what where my Python program is hanging?

我編寫的一個相當大的Python程序可以運行,但是有時,在運行數分鍾或數小時后,在不容易再現的瞬間,它掛起並且沒有任何輸出到屏幕。

我當時不知道它在做什么,它在代碼的哪一部分。

如何在調試器或其他工具中運行此程序,以查看程序在掛起時正在執行哪些代碼行?

它太大,無法在各處放置“打印”語句。

我做了:

python -m trace --trace /usr/local/bin/my_program.py

但這給了我很多輸出,我什至看不到任何東西,只有幾百萬行在屏幕上滾動。

最好的情況是,我可以使用“ kill -SIGUSR1”或類似的命令向程序發送一些信號,然后程序會進入調試器並向我顯示它停止的那一行,並可能允許我逐步執行該程序,然后。

我試過了:

pdb usr/local/bin/my_program.py

然后:

(Pdb) cont

但是當掛起時我該怎么做呢? 它不會引發異常,就像它在等待某些東西一樣,可能處於無限循環中。

更詳細一點:當程序掛起時,我按^ C鍵,然后(不確定是否有必要)該程序正常運行(沒有引發任何異常,並且沒有在屏幕上提示我為什么停止)。

這對您可能有用。 我通常會

>>> import pdb
>>> import program2debug
>>> pdb.run('program2debug.test()')

通常,我會在程序中添加-v選項,從而啟用大量的打印語句來詳細說明我的操作。 將來編寫程序時,請考慮先做同樣的事情,然后再增加數千行。

您可以嘗試在像devdev(eclipse)或pycharm這樣的IDE中以調試模式運行它。 您可以隨時中斷程序並轉到其當前執行點。

沒有哪個程序太大,無法在各處放置打印語句。 您需要閱讀logging模塊並插入大量logging.debug()語句。 這只是輸出到文件的打印語句的一種更好形式,可以在生產軟件中輕松關閉它。 但是從現在開始,多年后,當您需要修改代碼時,您可以輕松地將其重新打開,並從原始程序員的見解中受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM