Сегодня хочу коснуться темы дебаггинга в Foundry.
Я сам далеко не спец в детальных проходах по опкодам и пошаговому исследованию состояний памяти и хранилища, да и обучающих видео, достойных ссылок, я не нашел, поэтому будет лишь представление команд и описание их результатов.
Для того чтобы хорошо разбираться в дебаггинге нужно хорошо понимать несколько вещей:
1. Как работает EVM "под капотом";
2. Как работают опкоды;
3. Уметь писать код на assembly, хотя бы на базовом уровне;
4. Понимать как работает стек в Solidity;
5. Понимать как работает memory;
У меня есть "провисания" в знаниях в некоторых темах, которые я регулярно отслеживаю и доучиваю, но все равно иногда сложно "дойти до сути".
В первоначальном знакомстве со всем этим может помочь прекрасное видео от Ильи, где он разбирает байткод и показывает некоторые опкоды.
https://youtu.be/pz8NeV6bo3E
Но вернемся к дебаггингу в Foundry.
Как я понял из комментариев разработчиков, сейчас дебаггинг еще на начальном уровне и у команды большие планы на него. И сейчас эта опция скорее в формате "просмотра начинки".
Итак, допустим, что у нас есть некоторая функция в тестах, работу которой мы хотим разобрать.
Открываем наш терминал и прописываем команду:
forge test --debug FUNC
например:
forge test --debug "testSomething()"
Наш терминал, как бы разделится на 4 части с 4 разными окошками.
Вверху будут окошко опкодов и стека, а внизу - актуальный код контракта или его функция и отображение memory.
Вы также можете встретить цветовое обозначение в одном из этих окошек:
1. Красный - то, что записывается текущим опкодом,
2. Зеленый - то, что записалось предыдущим опкодом,
3. Голубой - то, что читается текущим опкодом
Навигация по значения в каждом окошке совершается с помощью клавиш на клавиатуре. Ниже окна дебаггера будет их обозначение, также его можно посмотреть тут:
https://book.getfoundry.sh/forge/debugger
В процессе своего обучения и работы с конкурсными аудитами, я не часто встречался лицом к лицу с дебаггингом (кода или транзакций, не важно), поэтому если у вас есть хорошие видео на эту тему, я с удовольствием их посмотрю и поделюсь на канале.
Приятного обучения!
#foundry #lesson35