Bitcoin-Core-Development

如何使用 pdb 調試 Taproot 功能測試?

  • January 3, 2021

我正在查看一些 Taproot 功能測試,例如feature_taproot.py以查看打開的 Taproot PR

我想使用pdb來調試這些測試。你能提供一些關於如何做到這一點的指導嗎?

比特幣核心測試文件提供了一些關於附加調試器的指導。功能測試在 Python 中,因此您正確地選擇了 pdb(而不是 gdb、lldb 等)來完成這項工作。

可以在任何時候將 python 調試器附加到測試。只需添加以下行:

import pdb; pdb.set_trace()

在測試的任何地方。然後,您將能夠檢查變數,以及與被測比特幣節點互動的呼叫方法。

如果您不確定在哪裡附加調試器的好點,一個好地方是在feature_taproot.pyrandom_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

然後你應該回到開始實驗之前的狀態。

引用自:https://bitcoin.stackexchange.com/questions/99318