Python

如何在 VSCode 中調試 Brownie?

  • March 12, 2022

如何在 Visual Studio Code 中調試 Brownie 程序?我想應該有一些 launch.json 創建但不知道是哪一個。

您可以通過幾種不同的方式在 brownie 中進行調試。

使用內置工具。

Brownie 有多種工具,例如檢查事務跟踪、還原消息和呼叫跟踪。您可以使用其中任何一種來查看交易成功/未通過的原因。

例如:

>>> tx.call_trace()
Call trace for '0xd31c1c8db46a5bf2d3be822778c767e1b12e0257152fcc14dcf7e4a942793cb4':
SecurityToken.transfer 0:5198  (0xea53cB8c11f96243CE3A29C55dd9B7D761b2c0BA)
└─SecurityToken._transfer 170:5198
   ├─IssuingEntity.transferTokens 608:4991  (0x40b49Ad1B8D6A8Df6cEdB56081D51b69e6569e06)
   │ ├─IssuingEntity.checkTransfer 834:4052
   │ │ ├─IssuingEntity._getID 959:1494
   │ │ │ └─KYCRegistrar.getID 1186:1331  (0xa79269260195879dBA8CEFF2767B7F2B5F2a54D8)
   │ │ ├─IssuingEntity._getID 1501:1635
   │ │ ├─IssuingEntity._getID 1642:2177
   │ │ │ └─KYCRegistrar.getID 1869:2014  (0xa79269260195879dBA8CEFF2767B7F2B5F2a54D8)
   │ │ ├─IssuingEntity._getInvestors 2305:3540
   │ │ │ └─KYCRegistrar.getInvestors 2520:3483  (0xa79269260195879dBA8CEFF2767B7F2B5F2a54D8)
   │ │ │   ├─KYCBase.isPermitted 2874:3003
   │ │ │   │ └─KYCRegistrar.isPermittedID 2925:2997
   │ │ │   └─KYCBase.isPermitted 3014:3143
   │ │ │     └─KYCRegistrar.isPermittedID 3065:3137
   │ │ └─IssuingEntity._checkTransfer 3603:4037
   │ ├─IssuingEntity._setRating 4098:4162
   │ ├─IssuingEntity._setRating 4204:4268
   │ ├─SafeMath32.add 4307:4330
   │ └─IssuingEntity._incrementCount 4365:4770
   │   ├─SafeMath32.add 4400:4423
   │   ├─SafeMath32.add 4481:4504
   │   ├─SafeMath32.add 4599:4622
   │   └─SafeMath32.add 4692:4715
   └─SecurityToken._checkTransfer 5071:5198

採用pdb

執行測試時,您可以將通常傳遞給 pytest 的任何標誌傳遞給 pytest,並以與調試 python 相同的方式進行調試。

例如,如果您有如下測試:

def test_something():
 transaction = contract.do_something({"from":account})
 assert transaction == 1

您可以對其進行測試並進入控制台,例如:

brownie test -k test_something --pdb

如果出現錯誤,它會將您置於最後出現錯誤的控制台中,您只需執行 python 命令即可查看發生了什麼。這是(在我看來)最好的方法之一。

使用控制台

最後一種方法是只使用布朗尼控制台。在核仁巧克力餅殼中,您可以做“任何事情”。

brownie console 

並嘗試自己執行和調試。

引用自:https://ethereum.stackexchange.com/questions/112558