Компиляция MariaDB для отладки
Компиляция MariaDB с полной информацией об отладке включает все символы кода, а также новый код для внутреннего тестирования структур и позволяет отслеживать выполнение MariaDB. Полный отладочный бинарник будет заметно медленнее, чем обычный бинарник (на 30%).
Компиляция MariaDB для отладки с использованием параметра CMAKE_BUILD_TYPE
В системах Unix можно создать отладочную сборку, выполнив cmake и установив параметр CMAKE_BUILD_TYPE в значение Debug. Например:
cmake -DCMAKE_BUILD_TYPE=Debug .
Компиляция MariaDB для отладки с использованием скриптов сборки
Другой вариант — использовать скрипты в каталоге BUILD, которые позволят скомпилировать MariaDB с наиболее распространёнными параметрами отладки и плагинами:
./BUILD/compile-pentium64-debug-max
или, если вы хотите использовать инструмент проверки памяти Valgrind с системой тестов MariaDB:
./BUILD/compile-pentium64-valgrind-max
В каталоге BUILD есть отдельные скрипты сборки для различных конфигураций.
Список необходимых пакетов/библиотек для сборки на Linux можно найти здесь.
Пример компиляции MariaDB для отладки с использованием скриптов сборки
- Скрипты, содержащие «debug» в имени, предназначены для разработчиков, которые хотят собирать, разрабатывать и тестировать MariaDB.
- Скрипты, содержащие «valgrind» в имени, предназначены для запуска mysqld под [[|http://valgrind.org|valgrind]]. Компиляция для valgrind означает, что мы используем другую реализацию MEM_ROOT, чтобы valgrind мог лучше обнаруживать переполнение памяти. Кроме того, некоторые области памяти помечаются как используемые/неиспользуемые для устранения ложных срабатываний.
- Скрипты, содержащие «max» в имени, включают все обычные плагины.
Вот пример того, как скомпилировать MariaDB для отладки в вашем домашнем каталоге с MariaDB 5.2.9 в качестве примера:
cd ~ mkdir mariadb cd mariadb tar xvf mariadb-5.2.9.tar.gz ln -s mariadb-5.2.9 current cd current ./BUILD/compile-pentium64-debug-max
Последняя команда создаст отладочную версию sql/mysqld. Если у вас система, отличная от 64-битного Intel/AMD на Linux, вы можете использовать другой файл BUILD/...-debug-max. Если это не удастся, попробуйте:
cmake --build . --config Debug make -j4
Создание оптимизированной сборки со символами отладки
Для создания MariaDB со символами, чтобы получить лучшие трассировки стека и иметь возможность отлаживать бинарник с gdb, необходимо указать параметр -g3 компилятору gcc.
Просто компиляция с -g3 сделает бинарник гораздо больше, но замедление сервера должно быть незначительным.
Один из способов сделать это — отредактировать скрипт
BUILD/compile-pentium64-max
и добавить -g3 в последнюю строку с extra_flags, как показано ниже:
extra_flags="$pentium64_cflags $fast_cflags -g3"
После этого вы можете скомпилировать MariaDB со символами отладки, просто выполнив указанный выше скрипт.
Создание отладочной сборки на Debian/Ubuntu
Чтобы создать бинарный файл «mysqld» с включённой отладкой, использующий те же параметры, что и в пакетах Debian/Ubuntu, необходимо сделать следующее (у вас должна быть строка deb-src одного из репозиториев MariaDB в вашем /etc/apt/sources.list):
apt-get build-dep mariadb-10.2 apt-get install cmake libaio1 libaio-dev apt-get source mariadb-10.2 cd mariadb-10.2* ./debian/rules configure ./BUILD/compile-pentuim64-debug-all
Тогда ваш бинарный файл mysqld с «включённой отладкой» будет в каталоге sql.
Этот бинарник можно напрямую заменить тем, который предоставляется пакетом, расположенным в «/usr/bin/mysqld».
Временная установка отладочной сборки
Приведённые ниже команды заменяют релизный mysqld бинарник отладочным mysqld бинарником, который вы скомпилировали. Важно, что они заменяют бинарник таким образом, чтобы его легко было вернуть к исходному релизному mysqld бинарнику.
Сначала остановите MariaDB.
Затем используйте утилиту mv для переименования релизного mysqld бинарника:
sudo mv /usr/sbin/mysqld /usr/sbin/mysqld-orig
Примечание: не используйте утилиту cp, так как это изменит временную метку изменения файла.
Затем установите отладочный mysqld бинарник из вашего исходного дерева:
sudo install ~/mariadb-10.3.14/sql/mysqld /usr/sbin/mysqld-debug
Затем установите ссылку mysqld на путь к вашему отладочному mysqld бинарнику:
sudo ln -s /usr/sbin/mysqld-debug /usr/sbin/mysqld
Затем запустите MariaDB.
Убедитесь, что вы заменяете /usr/sbin/mysqld путем к вашему mysqld бинарнику и также замените на путь к вашему отладочному ~/mariadb-10.3.14/sql/mysqldmysqld бинарнику.
Установка обратно вашей релизной сборки
Если вы хотите восстановить исходный mysqld бинарник, выполните следующие действия:
Сначала остановите MariaDB.
Затем выполните следующую команду для удаления символической ссылки:
sudo rm /usr/sbin/mysqld
Затем выполните следующую команду, чтобы переместить исходный mysqld релизный бинарник обратно на место:
sudo mv /usr/sbin/mysqld-orig /usr/sbin/mysqld
Затем запустите MariaDB.
Убедитесь, что вы заменяете /usr/sbin/mysqld путем к вашему mysqld бинарнику.
Обратите внимание, что отладочный mysqld бинарник, расположенный по адресу /usr/sbin/mysqld-debug, не был удалён. Был удалён только символическая ссылка на этот файл. Отладочный mysqld бинарник по-прежнему присутствует, если он понадобится в будущем.
Различные параметры компиляции
Изменение DBUG_ASSERT на вывод в лог ошибок
Отладочный бинарник содержит множество проверок кода и утверждений, которые не проверяются в производственных сборках. Это делается для повышения производительности при работе в производственной среде. В некоторых случаях, когда вы пытаетесь найти трудно воспроизводимую ошибку, может быть полезно иметь эти проверки и в производственных сборках.
Компиляция с -DDBUG_ASSERT_AS_PRINTF изменит DBUG_ASSERT() на вывод любых не пройденных проверок в лог ошибок.
cmake . -DDBUG_ASSERT_AS_PRINTF
Включение указанного параметра не должно существенно повлиять на производительность (вероятно, замедление менее 1%). Это достигается путём разделения утверждений в коде сервера MariaDB на две группы:
- Быстрые проверки, использующие
DBUG_ASSERT(): они преобразуются в вывод в лог ошибок. - Медленные проверки, использующие
DBUG_SLOW_ASSERT(). Они всегда будут удалены в производственных сборках.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/compiling-mariadb-for-debugging/