Избегайте отладки информации о golang

Я думаю, что gc включает в себя отладочную информацию по умолчанию. Однако я хочу избежать декомпиляции.

Как удалить информацию об отладке при компиляции кода go с помощью gc?

Примечание: Использование gccgo не решает проблему. Если я не компилирую с '-g', исполняемый файл прерывается и выводит только:

нет отладочной информации в ELF исполняемый errno -1 фатальная ошибка: нет отладочной информации в исполняемом файле ELF

стек выполнения: нет отладочной информации в ELF исполняемый errno -1 паника во время паники "

Ответ 1

У компоновщика go есть флаг -w, который отключает генерацию данных отладки DWARF. Вы можете предоставить флаг компоновщика для выполнения команд сборки инструмента следующим образом:

go build -ldflags '-w'

Другой подход на платформах Linux/Unix использует команду strip для скомпилированного двоичного файла. Это, похоже, создает меньшие двоичные файлы, чем вышеупомянутый вариант компоновщика.

Ответ 2

Я рекомендую использовать -ldflags="-s -w", который удаляет таблицу символов и отладочную информацию.

В качестве бонуса с Go 1.13 -trimpath можно использовать для уменьшения длины путей к файлам, хранящихся в файле.