我有一個用'exec'運行的python腳本。 當腳本調用某個函數時,我希望它知道該調用的行號和偏移量。在運行時識別python腳本行中的函數調用
這裏是一個例子。如果我的腳本是:
foo1(); foo2(); foo1()
foo3()
如果我在每一個功能的代碼,打印(行偏移),我應該得到
(0,0), (0,8), (0,16), (1,0)
在大多數情況下,這可以通過獲取堆棧中輕鬆完成幀,因爲它包含行號和函數名稱。唯一的問題是在某一行中有兩個具有相同名稱的函數。不幸的是,這是我常見的情況。有任何想法嗎?
好吧,改變原來的代碼似乎是最簡單的解決方案。
你將如何解決的事情就像
if foo1(7) or foo1(6):
或
foo2(foo1(), foo1())
這有一些不是很優雅的解決方案,例如,在前面的例子自動轉向:
def curpos(pos, func):
record_curpos(pos)
return func
curpos(foo2,0)(curpos(foo1,5)(), curpos(foo1,13)())
讓我知道你是否有更簡單的想法。
實際上,字節碼重寫是在另一個帖子中:http://nedbatchelder.com/blog/200804/wicked_hack_python_bytecode_tracing。HTML(我不必訴諸於此獲得分支機構覆蓋)。 – 2010-05-13 22:33:59
謝謝!看起來非常相關(並且很有趣) – Dani 2010-05-14 15:11:09