2013-05-10 109 views
5

我知道有一千個關於Python調試的帖子,但是我找不到我想要的東西....一個可視化調試器。例如:Python可視化調試器

[email protected] ~ $ cat duh.py  
import pdb 
class Coordinate(object): 
    pdb.set_trace() 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
    def __repr__(self): 
     return "Coord: " + str(self.__dict__) 
def add(a, b): 
    return Coordinate(a.x + b.x, a.y + b.y) 
def sub(a, b): 
    return Coordinate(a.x - b.x, a.y - b.y) 

one = Coordinate(100,200) 
two = Coordinate(300,200) 

add(one, two) 

我想查看實際使用的值。而不是看到def __init__(self, x, y):我想看到def __init__(self, 100, 200):

> /home/one/duh.py(14)<module>() 
-> one = Coordinate(100,200) 
(Pdb) s 
--Call-- 
> /home/one/duh.py(4)__init__() 
-> def __init__(self, x, y): 
(Pdb) s 
> /home/one/duh.py(5)__init__() 
-> self.x = x 
(Pdb) s 
> /home/one/duh.py(6)__init__() 
-> self.y = y 
(Pdb) s 
--Return-- 
> /home/one/duh.py(6)__init__()->None 
-> self.y = y 

我完全不使用是對什麼是翻譯的內部事情,真的想看到什麼是像其他腳本的內部去盲目語言調試器(如JavaScript步驟)。

+1

我相信這是[LightTable](http://www.lighttable.com/)所要做的(住在IDE中) - 不知道如何以及它的作品呢。 – 2013-05-10 00:26:55

+1

只是在我的答案中添加了一些關於Winpdb的信息。 (當我編輯答案時,我不確定它是否會通知您。)Winpdb是一款優秀的免費Python視覺調試器。我不確定爲什麼當我第一次回答時忘記了它;可能是因爲我一直在科莫多和IDEA度過。 :-) – 2013-06-21 20:11:10

回答

2

您正在定義您的當前pdb.set_trace()調用,而不是在初始化被調用後發生。如果您移動pdb.set_trace()內初始化

import pdb 
class Coordinate(object): 
    def __init__(self, x, y): 
      pdb.set_trace() 

      self.x = x 
      self.y = y 
    def __repr__(self): 
      return "Coord: " + str(self.__dict__) 
def add(a, b): 
    return Coordinate(a.x + b.x, a.y + b.y) 
def sub(a, b): 
    return Coordinate(a.x - b.x, a.y - b.y) 

one = Coordinate(100,200) 
two = Coordinate(300,200) 

add(one, two) 

調用然後在PDB,你可以只輸入print x, y和獲取值:

C:\Users\randlet>python duh.py 
> c:\users\randlet\duh.py(6)__init__() 
-> self.x = x 
(Pdb) print x, y 
100 200 
(Pdb) c 
> c:\users\randlet\duh.py(6)__init__() 
-> self.x = x 
(Pdb) print x, y 
300 200 
(Pdb) n 
> c:\users\randlet\duh.py(7)__init__() 
-> self.y = y 
(Pdb) n 
--Return-- 
> c:\users\randlet\duh.py(7)__init__()->None 
-> self.y = y 
(Pdb) n 
> c:\users\randlet\duh.py(18)<module>() 
-> add(one, two) 
(Pdb) print one, two 
Coord: {'y': 200, 'x': 100} Coord: {'y': 200, 'x': 300} 
(Pdb) s 
--Call-- 
> c:\users\randlet\duh.py(10)add() 
-> def add(a, b): 
(Pdb) print a, b 
Coord: {'y': 200, 'x': 100} Coord: {'y': 200, 'x': 300} 
(Pdb) 
8

這PDB調試看起來並不像樂趣。我明白你爲什麼不喜歡它。

幸運的是,這裏有一些可視化的Python調試器。我最常使用的兩種商品是商業產品,但都非常值得。他們是Komodo IDEIntelliJ IDEA。這些是支持Python以外的其他許多語言的多語言IDE。還有一個名爲PyCharm的IDEA版本的Python。

還有一個很棒的免費選項,Winpdb。它很容易使用:一旦你安裝並打開它,使用File/Launch並輸入你的.py文件的完整路徑,然後你就可以開始調試了。

這些產品都是多平臺的,但如果您在Windows上,另一個免費選項是微軟的Python Tools for Visual Studio。您可以將其安裝到Visual Studio 2015商業版或Visual Studio 2015的免費社區版中。

爲了給您一個想法,下面是Winpdb,Komodo和IDEA代碼的屏幕截圖。我走進__init__功能中的每個:

enter image description here  

enter image description here  

enter image description here

,如果你不喜歡我使用的代碼的字體不要擔心;這只是我個人的設置。當然,在正常使用中,屏幕並不那麼擁擠;我將它縮小以適合屏幕截圖。

我強烈建議使用這些可視化調試器中的任何一個 - 能夠通過單擊按鍵逐步執行代碼並觀察變量隨時變化,這是非常好的。

0

我一直在使用(自2011年1月以來)由WingWare WingIDE(我有版本4.x專業版)WingIDE。我只用它來進行調試,這對我很好 - 當然我不是高級用戶。我設置了斷點,一行一行,等等。

相關問題