首頁  >  問答  >  主體

python中有没有像java中的jstack命令

天蓬老师天蓬老师2743 天前989

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-17 13:06:00

    沒有像jstack那麼方便直接用的東西,一般來說有幾個方案:

    • IDE: 用諸如 PyCharm, Eclpise with Pydev 的工具調試,覺得掛起的時候暫停並檢查各個調用棧。
    • GDB: 優點是可以調試到native extension,缺點也很明顯,需要在編譯Python的時候加上Debug Symbols,預設這個是沒有的。簡單的說就是功能強大但是配得麻煩。
    • pdb:適合下斷點...
    • pudb: 改下程式碼,在程式入口import pudb; pudb.set_interrupt_handler(),在運作的時候就可以Ctrl-C進入到互動式偵錯環境,易用性還好吧。
    • 擼一個singal handler用來列印所有堆疊信息,參考 celery 實作的 install_cry_handler,或是看看 signalhandler,這個在 Python 3.3 自帶了。

    NOTE: 所有依賴signal的方案,有個缺點就是,POSIX有很多函數會在這些中斷產生時,回傳EINTR,直接導致Python 異常,例如send, recv, read, write 等等。 。 。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:06:00

    我不懂 Java,所以不清楚你想要的是什麼。你是想列印出所有執行緒的呼叫棧嗎?好像不容易的樣子。

    我通常是:

    1. 盡量避免使用執行緒
    2. 列印日誌。這樣可以大致推斷出線程在哪裡卡住了
    3. strace 到各個執行緒上檢查,看看它們卡在什麼系統呼叫上了

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:06:00

    python直接用多線程貌似是不行的 因為有個叫GIL的東西 至於你想看線程情況 可以用pdb調試 試試

    回覆
    0
  • 取消回覆