пятница, 10 апреля 2020 г.

Отладка в Golang

Отладка - это процесс выявления причин, по которым программа ведет себя неправильно. Отладчики позволяют понять ход выполнения программы и ее текущее состояние. Есть несколько стилей отладки; в этом посте основное внимание будет уделено подключению отладчика к программе и отладке дампа памяти.

Пользователи Go в основном используют следующие отладчики:

  • Delve: Delve - это отладчик языка программирования Go. Он поддерживает концепции времени выполнения Go и встроенные типы. Delve пытается быть полнофункциональным надежным отладчиком для программ Go.
  • GDB: Go обеспечивает поддержку GDB через стандартный компилятор Go и Gccgo. Управление стеком, многопоточность и среда выполнения содержат аспекты, которые достаточно отличаются от модели исполнения GDB и ожидается, что они могут запутать отладчик, даже когда программа скомпилирована с помощью gccgo. Несмотря на то, что GDB может использоваться для отладки программ Go, он не идеален и может создать путаницу.

Насколько хорошо отладчики работают с программами Go?

Компилятор gc выполняет такие оптимизации, как встраивание функций и регистрация переменных. Эти оптимизации иногда затрудняют отладку с помощью отладчиков. Предпринимаются постоянные усилия по улучшению качества информации DWARF, сгенерированной для оптимизированных двоичных файлов. До тех пор, пока эти улучшения не станут доступны, рекомендуется отключать оптимизации при создании отлаживаемого кода. Следующая команда создает пакет без оптимизации компилятора:

$ go build -gcflags=all="-N -l"

В рамках усилий по улучшению, Go 1.10 представил новый флаг компилятора -dwarflocationlists. Этот флаг заставляет компилятор добавлять списки расположений, которые помогают отладчикам работать с оптимизированными двоичными файлами. Следующая команда создает пакет с оптимизацией, но со списками расположения DWARF:

$ go build -gcflags="-dwarflocationlists=true"

Какой рекомендуемый интерфейс пользователя отладчика?

Хотя и delve, и gdb предоставляют CLI, большинство интеграций редакторов кода и IDE предоставляют специфичные для отладки пользовательские интерфейсы.

Можно ли сделать отладку после смерти программы (postmortem debugging) в Go?

Файл дампа основной памяти - это файл, который содержит дамп памяти запущенного процесса и состояние его процесса. Он в основном используется для посмертной отладки программы и для определения ее состояния во время работы. Эти два случая делают отладку дампов ядра хорошей диагностической помощью для вскрытия и анализа производственных сервисов. Можно получить файлы ядра из программ Go и использовать для отладки delve или gdb.


Читайте также:


Комментариев нет:

Отправить комментарий