2012-08-03 32 views
1

執行Python腳本最簡單的方法是什麼?對於每個執行語句,將行號或行本身傳遞給回調函數是什麼?例如以編程方式逐行跟蹤Python程序行/語句的執行

要執行的一段代碼

for i in range(5): 
    z = i**2 

和回調

def callback(line): 
    print line 

輸出將是:

for i in range(5): 
    z = i**2 
for i in range(5): 
    z = i**2 
for i in range(5): 
    z = i**2 
... 
etc 

說明此的另一種方式是,我想要知道如果我正在執行通過調試的腳本,那麼將執行下一個代碼段ger ..我見過this question about tracing,但我對跟蹤回調函數中執行的次數感興趣。

調試器將是有益的,但只有當我可以運行回調到Python代碼

回答

3

看那sys.settrace功能的能力也非交互模式。這使您可以指定爲每行代碼執行的跟蹤功能。我認爲,這是專門爲實現pdb而實施的,因此它處於您似乎想要的正確抽象層次。實現你想要的並不是微不足道的,但我認爲這是最好的開始。

對於使用此功能的生產程序,請看coverage.py

2

四月的傻瓜模塊goto是在Python追查實施工作的例子,所以雖然它無疑比較慢(而不是coverage.py中的C實現),它很容易理解。 http://entrian.com/goto/

+0

多數民衆贊成在可怕的,但有趣:) – dfb 2013-01-31 18:50:43

+0

@dfb確實。它還顯示瞭如何將執行頭更改爲另一行。基於該代碼,我實現了絕對和相對的JMP指令。很有趣。 – 2013-02-01 12:26:47