Описание Remix Debugger. Часть 1
Несколько раз, то в процессе решения задач, то в просмотре каких-либо уроков по Solidity, авторы открывали дебаггер Ремикса и показывали там изменения, которые происходят в коде контракта. Хоть на тот момент и было все понятно, но общую суть плагина я не понимал. Давайте вместе пройдемся по его окошкам.
Итак, после того, как вы сделали деплой контракта в Ремиксе и провели транзакцию, то в терминале ниже, можно будет увидеть информацию о ней и кнопочку Debug. Нажмем ее и откроется новый раздел в окне с кучей непонятных окошек.
1. Навигация. Она представлена полем, где указан хеш транзакции и навигационными стрелками.
- Ползунком можно управлять мышью, чтобы пройтись по всем шагам транзакций контракта. После версии 0.7 ваш код в контракте также будет подсвечиваться в соотношении текущего шага дебага.
Стрелочки (слева-направо):
- Step over back. Переход на предыдущий опкод. Если на предыдущем шаге вызывалась функция, то сейчас она вызвана НЕ будет.
- Step back. Шаг назад на предыдущий опкод.
- Step into. Переход на следующий опкод. Если существует вызов функции, то он будет совершен.
- Step over forward. Переход на следующий опкод. Если существует вызов функции, то он НЕ будет совершен.
- Jump to the previous breakpoint. Брейкпойнты расположены внутри Редактора кода. Если текущий брейкпоинт был пройден, то кнопка переместит слайдер на последний пройденный брейкпоинт.
- Jump out. Когда совершается вызов функции и вы нажимаете эту кнопку, то слайдер переместится в конец данного вызова.
- Jump to the next breakpoint. Если есть последующий брейкпоинт, то слайдер переместится туда.
Как я понял, брейкпоинты - это некие места в коде, по которым ориентируется дебаггер. Мы можем сами устанавливать их, нажав на строку в коде (или ее номер). Должна появиться небольшая точка слева от номера строки в коде.
Далее поговорим об окошках.
#remix #debugger
Несколько раз, то в процессе решения задач, то в просмотре каких-либо уроков по Solidity, авторы открывали дебаггер Ремикса и показывали там изменения, которые происходят в коде контракта. Хоть на тот момент и было все понятно, но общую суть плагина я не понимал. Давайте вместе пройдемся по его окошкам.
Итак, после того, как вы сделали деплой контракта в Ремиксе и провели транзакцию, то в терминале ниже, можно будет увидеть информацию о ней и кнопочку Debug. Нажмем ее и откроется новый раздел в окне с кучей непонятных окошек.
1. Навигация. Она представлена полем, где указан хеш транзакции и навигационными стрелками.
- Ползунком можно управлять мышью, чтобы пройтись по всем шагам транзакций контракта. После версии 0.7 ваш код в контракте также будет подсвечиваться в соотношении текущего шага дебага.
Стрелочки (слева-направо):
- Step over back. Переход на предыдущий опкод. Если на предыдущем шаге вызывалась функция, то сейчас она вызвана НЕ будет.
- Step back. Шаг назад на предыдущий опкод.
- Step into. Переход на следующий опкод. Если существует вызов функции, то он будет совершен.
- Step over forward. Переход на следующий опкод. Если существует вызов функции, то он НЕ будет совершен.
- Jump to the previous breakpoint. Брейкпойнты расположены внутри Редактора кода. Если текущий брейкпоинт был пройден, то кнопка переместит слайдер на последний пройденный брейкпоинт.
- Jump out. Когда совершается вызов функции и вы нажимаете эту кнопку, то слайдер переместится в конец данного вызова.
- Jump to the next breakpoint. Если есть последующий брейкпоинт, то слайдер переместится туда.
Как я понял, брейкпоинты - это некие места в коде, по которым ориентируется дебаггер. Мы можем сами устанавливать их, нажав на строку в коде (или ее номер). Должна появиться небольшая точка слева от номера строки в коде.
Далее поговорим об окошках.
#remix #debugger
👍2
Описание Remix Debugger. Часть 2
Поговорим об окошках дебаггера.
Function Stack. Показывает все функции, которые задействованы в транзакции.
Solidity Locals. Показывает локальные переменные внутри функции.
Solidity State. Показывает все переменные состояния в контракте.
Opcodes. Показывает шаг и опкод, который используется в данный момент.
Step details. Показывает больше информации о шаге опкода.
Stack. Отображает стек EVM.
Memory. Отображает состояние памяти. Первые два слота, по правилам языка, всегда путые (до 0x40), третий слот (0х40) - указывает на пустое место в памяти, куда можно вести запись. Записи хранятся в формате Hex.
Также в памяти отображается три колонки: первая - место в памяти, вторая - hex значение, третье - расшифровка значения. Если в третьем стоят знаки "?", это означает, что значения не существует.
Storage. Постоянное хранилище.
Call Stack. Все вычисления с массивами данных тут называются Stack. Он может быть максимальным размером в 1024 элемента и содержать слова в 256 бит.
Call Data. Содержит параметры функции.
Return Value. Отображает то, что возвращает функция.
Full Storage Changes. Отображает состояние хранилища на момент завершения выполнения функции.
Global Variables. Глобальные переменные доступные на данный момент.
Далее поговорим о том, как его использовать в своей работе с контрактом.
#remix #debugger
Поговорим об окошках дебаггера.
Function Stack. Показывает все функции, которые задействованы в транзакции.
Solidity Locals. Показывает локальные переменные внутри функции.
Solidity State. Показывает все переменные состояния в контракте.
Opcodes. Показывает шаг и опкод, который используется в данный момент.
Step details. Показывает больше информации о шаге опкода.
Stack. Отображает стек EVM.
Memory. Отображает состояние памяти. Первые два слота, по правилам языка, всегда путые (до 0x40), третий слот (0х40) - указывает на пустое место в памяти, куда можно вести запись. Записи хранятся в формате Hex.
Также в памяти отображается три колонки: первая - место в памяти, вторая - hex значение, третье - расшифровка значения. Если в третьем стоят знаки "?", это означает, что значения не существует.
Storage. Постоянное хранилище.
Call Stack. Все вычисления с массивами данных тут называются Stack. Он может быть максимальным размером в 1024 элемента и содержать слова в 256 бит.
Call Data. Содержит параметры функции.
Return Value. Отображает то, что возвращает функция.
Full Storage Changes. Отображает состояние хранилища на момент завершения выполнения функции.
Global Variables. Глобальные переменные доступные на данный момент.
Далее поговорим о том, как его использовать в своей работе с контрактом.
#remix #debugger
👍1
Описание Remix Debugger. Часть 3
Я сам еще мало работал с дебаггером, поэтому каких-либо супер детальных примеров привести не смогу. Скорее опишу, для каких задач он может быть полезен.
Отлавливание ошибок
Наверное, это его самая явная цель создания. Когда мы получаем ошибку в проведении транзакции, то есть четыре способа ее решить: просмотреть код в поисках недочетов, заглянуть в дебаггер, погуглить и спросить в чате.
В отличие от трех остальных, дебаггер позволит не только исправить ошибку, но и понять, как она вообще произошла в коде.
Особенно это будет полезно, когда у вас несколько перекликающихся контрактов (наследование), и нужно отследить этап, в точности до опкода, когда происходит ошибка и где.
Переменные
Также при помощи дебаггера можно отслеживать изменения состояний локальных переменных и переменных состояния. Очень часто при написании кода, его редактировании или наследовании, разработчики забывают удалить ненужные переменные или же они обновляются без предупреждения. И также часто это приводит к взлому.
Слоты памяти
Еще одна киллер-фича дебаггера. Мы уже не понаслышке знаем, что слоты памяти являются одним из самых уязвимых мест в Solidity. Одна не инициализированная структура, перегрузка массива или делегирование может стоить больших денег. Дебаггер поможет отловить такие изменения.
Если вы встречали другие примеры использования дебаггера в Ремиксе, то буду рад, если напишите о своем опыте в комментариях.
#remix #debugger
Я сам еще мало работал с дебаггером, поэтому каких-либо супер детальных примеров привести не смогу. Скорее опишу, для каких задач он может быть полезен.
Отлавливание ошибок
Наверное, это его самая явная цель создания. Когда мы получаем ошибку в проведении транзакции, то есть четыре способа ее решить: просмотреть код в поисках недочетов, заглянуть в дебаггер, погуглить и спросить в чате.
В отличие от трех остальных, дебаггер позволит не только исправить ошибку, но и понять, как она вообще произошла в коде.
Особенно это будет полезно, когда у вас несколько перекликающихся контрактов (наследование), и нужно отследить этап, в точности до опкода, когда происходит ошибка и где.
Переменные
Также при помощи дебаггера можно отслеживать изменения состояний локальных переменных и переменных состояния. Очень часто при написании кода, его редактировании или наследовании, разработчики забывают удалить ненужные переменные или же они обновляются без предупреждения. И также часто это приводит к взлому.
Слоты памяти
Еще одна киллер-фича дебаггера. Мы уже не понаслышке знаем, что слоты памяти являются одним из самых уязвимых мест в Solidity. Одна не инициализированная структура, перегрузка массива или делегирование может стоить больших денег. Дебаггер поможет отловить такие изменения.
Если вы встречали другие примеры использования дебаггера в Ремиксе, то буду рад, если напишите о своем опыте в комментариях.
#remix #debugger
👍1