簡體   English   中英

Emacs:調試python的方法

[英]Emacs: methods for debugging python

我在programmers.stackexchange.com上發布了這個,但我認為它可能更適合SO。

我使用emacs來滿足我的所有代碼編輯需求。 通常情況下,我會使用Mx編譯來運行我的測試運行器,我會說我得到了大約70%的我需要做的事情,以保持代碼正常,但最近我一直想知道如何使用Mx pdb打破斷點並檢查事情會很好的場合。

在我的谷歌搜索中,我發現了一些表明這是有用/可能的事情 但是我還沒有設法讓它以我完全理解的方式運作。

我不知道是否是buildout + appengine的組合可能會讓它變得更加困難但是當我嘗試做類似的事情時

M-x pdb
Run pdb (like this): /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

其中... / bin / python是解釋器buildout使用為所有egg設置的路徑。

〜/ bin / pdb是一個使用當前python解釋器調用pdb.main的簡單腳本

HellooKitty:hydrant twillis$ cat ~/bin/pdb
#! /usr/bin/env python

if __name__ == "__main__":
    import sys
    sys.version_info
    import pdb
    pdb.main()
HellooKitty:hydrant twillis$ 

... / bin / devappserver是buildout配方為gae項目制作的dev_appserver腳本,而... / parts / hydrant-app是app.yaml的路徑

我第一次收到提示

Current directory is /Users/twillis/bin/
C-c C-f

什么都沒發生,但是

HellooKitty:hydrant twillis$ ps aux | grep pdb
twillis    469 100.0  1.6   168488  67188 s002  Rs+   1:03PM   0:52.19 /usr/local/bin/python2.5 /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/
twillis    477   0.0  0.0  2435120    420 s000  R+    1:05PM   0:00.00 grep pdb
HellooKitty:hydrant twillis$ 

事情正在發生

C-x [space]

將報告已設置斷點。 但我無法讓事情順利進行。

感覺我在這里遺漏了一些明顯的東西。 我呢?

那么,emacs中的交互式調試值得嗎? 可以互動調試谷歌appengine應用程序嗎? 關於我如何使這個工作的任何建議?

GAE的一個特定問題是它將STDOUT重定向到瀏覽器,包括調試器輸出。

正如pdb文檔中所述,通常的工作流程是在您需要的位置在代碼中設置斷點。 通常你會import pdb; pdb.set_trace() import pdb; pdb.set_trace() ,但在GAE的情況下,您還需要獲取STDIN和STDOUT。 例如,此代碼段:

def set_trace():
    import pdb, sys
    debugger = pdb.Pdb(stdin=sys.__stdin__, 
        stdout=sys.__stdout__)
    debugger.set_trace(sys._getframe().f_back)

然后在emacs中啟動一個shell並從那里運行你的代碼:

$ ./bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

為了方便訪問emacs中的shell交互緩沖區中的正確位置,我使用poptoshell.el(google it,我沒有足夠的聲譽來添加其他鏈接)

最后,確保你有一個最新版本的python-mode,它包含pdbtrack功能(你幾乎肯定會這樣做,但你肯定想要它,因為它提供了在emacs中逐步執行代碼的方法)。

嘗試在代碼中使用pdb.set_trace() ,然后使用您的驅動程序腳本而不是正常調用您的程序(我認為只是/Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/應該在你的情況下工作。)你應該在你調用pdb.set_trace()的位置進入調試器,然后從那里你可以根據需要添加斷點或其他任何東西。

暫無
暫無

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

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