如何使用 pdb 調試 Taproot 功能測試?
我正在查看一些 Taproot 功能測試,例如feature_taproot.py以查看打開的 Taproot PR。
我想使用pdb來調試這些測試。你能提供一些關於如何做到這一點的指導嗎?
比特幣核心測試文件提供了一些關於附加調試器的指導。功能測試在 Python 中,因此您正確地選擇了 pdb(而不是 gdb、lldb 等)來完成這項工作。
可以在任何時候將 python 調試器附加到測試。只需添加以下行:
import pdb; pdb.set_trace()
在測試的任何地方。然後,您將能夠檢查變數,以及與被測比特幣節點互動的呼叫方法。
如果您不確定在哪裡附加調試器的好點,一個好地方是在feature_taproot.py
random_checksig_style(pubkey)
中定義助手之後。這會創建一個隨機的 CHECKSIG Tapscript,它只需要見證堆棧上的有效簽名。這裡有一個很好的影片教程,來自 Simeon Franklin 在 pdb 上。有大量 pdb 命令,但您最有可能使用的關鍵命令是:
l(ist) n(ext) c(ontinue) s(tep) r(eturn) b(reak)
正如富蘭克林所說:
l
向您顯示您在程式碼中的位置。n
執行下一行。c
離開調試器控制並正常執行您的程式碼。s
進入下一行執行,包括函式呼叫(如果存在)。r
跳到目前執行函式的末尾並b
設置斷點。重要的是要意識到,當您從 pdb 控制台進行調試時,您可以輸入任何有效的 Python,更改程序的變數或執行流程並檢查它們的值。(也
p expression
用於列印表達式值或pp expression
漂亮地列印表達式值。以及whatis expression
列印該表達式的類型)。使用 pdb 的更詳細的指導在python.org上,但上面應該是一個很好的介紹。
請記住,您正在本地對 Pieter Wuille 的
taproot
分支進行編輯,並且不會將它們推送到 GitHub,因此您可以進行任何您想要的更改。如果您想在開始編輯之前恢復到 Pieter Wuille 的程式碼(並放棄所有編輯),您可以執行git reset --hard HEAD
然後你應該回到開始實驗之前的狀態。