Godebug — Кроссплатформенный Отладчик Для Go

Ребята из Mailgun представили новинку кроссплатформенный отладчик для Go , в котором используется оригинальная технология, совершенно отличная от стандартных подходов.

Забегая вперед, с помощью Gopherjs этот отладчик работает даже в браузере.



godebug — кроссплатформенный отладчик для Go



вступление

Все, что стоит на пути [хорошего отладчика Go] — это написание большого количества непереносимого низкоуровневого кода, взаимодействующего с глючными недокументированными интерфейсами.

—Роб Пайк

Поддержка Go уже давно была в отладчике gdb, но ее еще много осталось небольшие, но неприятные проблемы , что не давало возможности полноценно его использовать.

Также есть проект копаться , но выводы о его популярности пока сделать сложно.

В любом случае, «классические» подходы к написанию отладчика Go неизменно сталкивались со сложностью реализации, особенно когда речь идет о специфичных для Go вещах, таких как горутинная отладка.

Совершенно иной подход применил Джереми Шлаттер из компании Mailgun, довольно активно использующей Go — он взял за основу ту же идею, которая лежит в основе инструмента покрытия Go, встроенной системы тестирования и некоторых других: изменение кода на лету.

перед компиляцией.

Такой подход вообще стал возможен благодаря двум основным моментам — огромной скорости компиляции и простой грамматике языка.

Встроенные в stdlib инструменты для разбора грамматики Go (go/ast и go/parser) позволяют довольно легко модифицировать код скомпилированной программы на лету, и это открывает совершенно новый пласт возможностей.



Пример

Например, возьмем простую программу на Go:
   

package main import "fmt" func hello(text string) {

Теги: #Go #debug #отладка #Go
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.