Wie kann ich bei der Entwicklung meines Smart Contracts Fehler beheben? Gibt es Debugging-, Test-Tools oder Simulatoren, mit denen ich meinen Code untersuchen kann?
Das sind alles gute Tools, aber ich habe festgestellt, dass das Protokollieren von Ereignissen eine viel einfachere Methode zum Debuggen ist, und wenn Sie irgendetwas mit Geld tun, möchten Sie aufzeichnen, was passiert ist.
In Solidity melden Sie sich mit Events an . Sie können dann alle Ereignisse in Ihrem Vertrag mit dem Callback "allEvents" von web3.js abhören
So debugge ich meine (derzeit) 780 Solidity-Linien.
Um einen Vertrag zu debuggen, können Sie den Solidity-Browser verwenden
Der Debugger bietet Ihnen die Möglichkeit, jede Transaktion (Erstellung oder Aufruf) Schritt für Schritt zu debuggen und den Speicher/Speicherplatz zu visualisieren. Es hilft Ihnen, die Gaskosten nach Opcode und das verbleibende Gas nach jedem Schritt zu verfolgen.
Um Transaktionen zu debuggen, gibt es zwei Möglichkeiten:
1 – unter Verwendung einer Blocknummer und eines Transaktionsindex.
2-mit einem Transaktions-Hash.
Wenn das Laden der Transaktion erfolgreich ist, werden die Hash-, Von- und Bis-Felder angezeigt. Dann wird der vm-Trace geladen.
Der Debugger selbst enthält mehrere Steuerelemente, die es ermöglichen, den Trace zu überspringen und den aktuellen Status eines ausgewählten Schritts anzuzeigen.
Slider- und Stepping-Aktion:
Der Schieberegler ermöglicht es, schnell von einem Zustand in einen anderen zu wechseln. Stepping-Aktionen sind:
Schritt zurück Schritt zurück Schritt vorwärts Schritt vorwärts Schritt zum nächsten Anruf (dies wählt den nächsten Status aus, der sich auf Kontextänderungen bezieht - CALL, CALLCODE, DELEGATECALL, CREATE) Statusanzeige:
Das obere rechte Feld enthält grundlegende Informationen über den aktuellen Schritt:
VMTraceStep : der Index im Trace des aktuellen Schritts. Schritt Speicher hinzufügen Gas: von diesem Schritt verwendetes Gas Verbleibendes Gas: verbleibendes Gas Geladene Adresse: Der aktuell geladene Code bezieht sich auf den ausführenden Code. Die anderen 6 Felder beschreiben den aktuell ausgewählten Zustand:
Befehlsliste : Liste aller Befehle, die den aktuellen Ausführungscode definieren. Stapelspeicher ändert Speicheraufrufdaten$ Aufrufstapel
Breakpoints in Remix Breakpoints können hinzugefügt und entfernt werden, indem Sie auf den linken Rand der ersten Codezeile klicken. Sie können beliebig viele Haltepunkte hinzufügen.
start debugging
Schaltfläche nichts bewirkt, außer 0xc09ff6fb32dd6ef66f5691367c11c762c8f730aadeab065d57f8137cd3746bfc is not a contract invokation or contract creation
in das Protokoll zu schreiben.Sie können den truffle debug
Befehl verwenden: http://truffleframework.com/blog/announcing-full-portable-solidity-debugger
Es unterstützt:
Zum Debuggen von Truffle-JavaScript-Tests in Visual Studio Code hat diese Antwort für mich funktioniert: https://ethereum.stackexchange.com/a/41096/3708
Die neueste Version von Truffle verfügt über einen eingebauten Debugger, der zum Debuggen des Status einer fehlgeschlagenen Transaktion verwendet werden kann.
$ truffle debug <transaction-id>
Wo <transaction-id>
ist die ID der fehlerhaften Transaktion,
Sobald der Debugger gestartet ist, folgen Sie den Anweisungen zum Durchlaufen und Drucken des Variablenstatus usw
Erfahren Sie hier mehr: https://www.trufflesuite.com/blog/announcing-full-portable-solidity-debugger
Paul Razvan Berg