Contract-Debugging

在 Mix 中調試大型/優化合約的最佳方法

  • April 11, 2016

我有一份很長的契約。如果不先壓縮它就無法部署,因此無法在混合中正確調試它。

有人發現比處理更小的塊更有效的方法嗎?我發現僅使用 javascript 進行調試很困難,因為處理事務需要 15-30 秒。

冒著被否決的風險,我會說“不要使用調試器進行調試”。

使用 Solidity 事件,並大量記錄您的契約。就 gas 而言,日誌記錄非常便宜,並且使用 web3.js 事件偵聽器很容易擷取每個 Solidity 事件,這些事件偵聽器將輸出解析到您可以使用幾行程式碼將其直接記錄到 JSON 日誌文件的程度。

因此,將契約中發生的所有事情記錄到日誌文件中,您就可以重建發生的事情。這樣做的好處是,如果您稍後在生產中遇到問題,並且您啟用了所有這些便宜的日誌記錄,您可能會在事後快速找到問題的根源。在我多年的開發過程中,這項技術已經多次拯救了我。這是“大數據”方法(但規模較小)

我已經使用複雜的業務邏輯以這種方式調試了 1000 多條solidity 行,效果很好。事件記錄是我發現的乙太坊更令人愉悅的功能之一。

交易需要 15-30 秒來處理。

像我一樣使用 testrpc 實現或破解 geth 來探勘每一秒。這也幫助我快速調試。請參閱下面的連結。

一些進一步閱讀的連結:

Solidity 事件

web3.js 監聽所有事件

Bunyan,一個 node.js 日誌模組

入侵 Geth 使其成為我的每秒一次

ethereumjs-testrpc AFAICT 是最成熟的用於測試的 EVM 模擬器。

如果您主要進行區塊鏈上的互動,那麼Dapple是 Solidity 的單元測試框架。我沒用過,但聽說很好用。(我的應用程序現在大部分是非區塊鏈的,所以我不需要它)。

最後,阻止難以發現的錯誤的一個好方法是編寫黑盒單元測試。我破解了自己的單元測試框架,但我聽說truffle現在已經相當成熟了,所以這可能是一個不錯的選擇。

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