我想要構建一個可視化調試器,它可以幫助編程學生了解如何進行表達式評估(子表達式如何通過它們的值進行評估和「替換」,例如Excel中的表達式評估可視化器)。如何通過Python表達式評估過程?
看起來您無法通過Python的pdb逐步完成此過程,因爲其最好的步驟粒度是代碼行。是否有可能通過Python字節碼?任何其他想法如何實現這一目標?
編輯:我需要一個輕量級的解決方案,可以建立在CPython標準庫之上。
我想要構建一個可視化調試器,它可以幫助編程學生了解如何進行表達式評估(子表達式如何通過它們的值進行評估和「替換」,例如Excel中的表達式評估可視化器)。如何通過Python表達式評估過程?
看起來您無法通過Python的pdb逐步完成此過程,因爲其最好的步驟粒度是代碼行。是否有可能通過Python字節碼?任何其他想法如何實現這一目標?
編輯:我需要一個輕量級的解決方案,可以建立在CPython標準庫之上。
我有一個解決方案的想法也是我自己 - 我可以儀器通過包裝的所有(子)代碼(或AST)的表達式虛擬方法調用,它只是返回它的參數。例如。
x = f(sin(x + y))
成爲
x = dummy(f(dummy(sin(dummy(dummy(x) + dummy(y))))))
這樣,我保證通知各子表達式後得到評估,我也得到了值。我還可以添加額外的位置/ AST有關其表達的一部分目前正在處理,如:
... dummy(x, line=23, col=13, length=1) ...
不幸的是,這需要與AST和編譯搞亂......
嗨!看來我正在解決同樣的問題,你可以請你看看[我的問題](http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by-步)。有一個賞金開放。看來我正在尋找你在這裏描述的一部分代碼。我可以嘗試深入瞭解Thonny軟件的代碼(因爲我想與Jupyter進行互操作,並且我不想要完整的調試器,我目前不想使用Thonny),但我相信你會做得更好:) –
@ IlyaV.Schurov,相關的代碼在這裏https://bitbucket.org/plas/thonny/src/master/thonny/backend.py?at=master&fileviewer=file-view-default,也許你可以從那裏重用一些東西。您可能還需要https://bitbucket.org/plas/thonny/src/master/thonny/ast_utils.py?at=master&fileviewer=file-view-default,因爲Python AST沒有包含足夠(正確)的關於每個位置的信息AST節點位於代碼中。 – Aivar
謝謝!你可以請你的答案複製到[我的問題](http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by-step)讓我把它看作是一個可能的賞金贏家? –
使用pdb,可以進入任何函數調用。對於任何其他語句,pdb可以在行中打印相關名稱的值。您尋找的其他功能沒有涵蓋?
如果您想要「進入」像列表理解這樣的事情,那麼從純粹的Python角度來看,它將無法工作,因爲它只是一個操作碼。在每個表達式的某個時刻,你需要告訴你的學生,這就是Python進入C實現並評估它的地方......'。
問題是當一條線上有多個函數調用時。如果我在這條線上選擇「step」命令,那麼我會發現自己處於這些功能之一,並且不清楚哪一個。如果Python步入所有函數,那麼我可以提前解析表達式,以查明函數調用以哪種順序進行評估。這將幫助我保持目前正在評估的子表達式的軌跡。但不幸的是,Python不會進入內建/ C函數,而且語法上這些函數調用與用戶定義函數的調用是無法區分的。 – Aivar
只要你按住's',它就會進入所有功能。而你的抱怨'Python不會進入內置/ C函數'正是我的觀點:在某個時刻,你進入C並需要一種方式來處理這個問題。這可能是gdb或其他東西,但它會一直髮生。 – jknupp
我不想步入C函數,我只想知道我在原始表達式中的位置,但是Python不會告訴我這些(請參閱我的其他問題:http://stackoverflow.com/questions/ 13952022 /)。我可以統計函數條目的數量並自己跟蹤位置,但有些函數調用(未知數)會被跟蹤器忽略,這就打破了我的計數系統。 – Aivar
你應該看看reinteract,這是很簡單的,你可以有助於該
你試過pudb? http://pypi.python.org/pypi/pudb 在Debian樣: apt-get的安裝python-pudb
它依附於PDB,所以我想這是不是你要找的東西。至少,當你在一個函數步驟,清楚地顯現你是哪一個
教學生的東西,你可能可以。
我知道,這是完美的,但這是目前我能想到的最好的。
不會像pythons c級調試器[gdb](http://wiki.python。組織/莫恩/ DebuggingWithGdb)? – 2012-12-13 14:21:53
@ X.Jacobs - 我需要一個可以構建在CPython默認發行版上的解決方案,它可以在Windows以及OSX和Linux中運行。 – Aivar
[使用GDB 7的新Python擴展支持調試C/C++和CPython](http://misspent.wordpress.com/2012/03/24/debugging-cc-and-cpython-using-gdb-7s-new -python-extension-support /) – 2012-12-13 14:33:09