2011-06-30 29 views
5

這應該是一個簡單的問題,在成員函數打破,但我的搜索至今一直無果而終:在Python調試

我使用首次Python的調試器(PDB),並且是相當高興地發現大多數熟悉使用gdb的命令。

然而,當我去設置斷點類的解析()成員JamParser的發言:

(Pdb) b JamParser.parse 
*** The specified object 'JamParser.parse' is not a function 
or was not found along sys.path. 

我試了好幾個變種,其中包括:

(Pdb) b jam2dot.py:JamParser.parse 

我認爲,因爲我從命令行調用了調試器,它知道文件中的實體。這是一個錯誤的假設嗎?

documentation表示break可以將函數作爲參數,但不提供任何語法幫助。那麼如何按名稱爲成員函數設置斷點呢?

+2

如果您有權訪問源代碼,我通常會刪除一個'import pdb; pdb.set_trace()'我想要的地方而不是逐步通過調試器。 –

+0

@Noufal:現在我有更多的經驗,我已經意識到你的建議的價值,謝謝。 –

+0

不客氣。兩年前,我從PyCon的一羣Python專家那裏學到了這個技巧。 :) –

回答

13

您需要先導入名稱,然後才能在調試器中引用它們。

(Pdb) from jam2dot import JamParser 
(Pdb) b JamParser.parse 
+0

這樣做的伎倆,謝謝! –

+0

哇。多麼糟糕,誤導性的錯誤信息。如果一個程序*找不到某個東西,應該這樣說,而不是暗示它找到了它,但它不是正確的東西。 – kindall

+0

是的,它很窮,不是嗎?麻煩的是,'b'命令需要*文件名,*或者*函數,所以錯誤信息必須尊重這個歧義(畢竟,也許你想在名爲'JamParser.py'的文件中有一個斷點並且錯誤地鍵入擴展名)。但我同意它可以做得比這更好。我建議你提交一個錯誤報告! –