2011-05-11 126 views
98

所以我跑在其中我打電話Python的調試器,PDB通過編寫Python腳本:如何Python的調試器中執行多行語句(PDB)

import ipdb; ipdb.set_trace() 

(IPython中的版本PDB,雖然對於這個問題,我認爲這不會有什麼區別;我只用它作爲彩色輸出)。

現在,當我去調試我要執行多行語句,如或如果子句的for循環,但只要我型

if condition: 

,然後按回車鍵,我得到錯誤信息*** SyntaxError: invalid syntax (<stdin>, line 1)

如何在PDB中執行多行語句?如果不可能,是否有辦法解決這個問題,仍然執行if子句或for循環?

回答

2

我不知道你是否可以做到這一點,但這是ipdb的一個很棒的功能。您可以使用列表內涵,當然,並執行類似簡單的多行表達式:

if y == 3: print y; print y; print y; 

你也可以寫一些功能預先做什麼是你需要做,通常會採取多條線路。

23

在Python(2.7.1)解釋器或調試器(導入pdb)中,可以使用以下語法執行多行語句。

for i in range(5): print("Hello"); print("World"); print(i) 

注意:當我在解釋器中時,必須在代碼執行前兩次返回。但在調試器內部,我只需要返回一次。

+0

它不允許運行比一個層次更深的任何東西。 – 2018-01-07 19:19:22

6

如果您希望在打斷點時執行幾個命令,則有特殊情況。然後是調試器命令commands。它允許你輸入多行命令,然後用end關鍵字結束整個序列。更多與(pdb) help commands

175

你能做到這一點,而在PDB與所有可用的本地變量啓動臨時交互式Python會話:

(pdb) !import code; code.interact(local=vars()) 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> 

當你完成後,使用Ctrl-d,返回到正規PDB提示。

只要不擊中Ctrl-C,這將終止整個pdb會話。

+4

輝煌,感謝提示 – cedbeu 2013-08-16 13:25:41

+10

使用pdb'interact'命令([我從這個bug跟蹤器消息中學到](http://bugs.python.org/msg215963))看起來可以達到同樣的效果。 – gerrit 2014-06-11 15:15:52

+1

爲什麼'import'語句中需要'!'? – 2014-11-14 09:06:18

10

在python3 ipdb(和pdb)中有一個叫interact的命令。它可用於:

Start an interactive interpreter (using the code module) whose global namespace contains all the (global and local) names found in the current scope.

要使用它,只需在PDB提示符下輸入interact。除此之外,它適用於跨越多行的代碼,也用於避免意外觸發其他pdb命令。

+0

當我這樣做時,它給了我「NameError:name'interact'沒有定義」。 – Jason 2017-12-14 04:10:46

+0

@jason 3.2或更高版本 – vaerek 2017-12-14 04:13:57

+0

解釋。我在Python 2.7。 – Jason 2017-12-14 06:49:06