Spec-Zone.ru › MariaDB

Компиляция 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/mysqld на путь к вашему отладочному mysqld бинарнику.

Установка обратно вашей релизной сборки

Если вы хотите восстановить исходный 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(). Они всегда будут удалены в производственных сборках.

См. также

  • Настройка среды сборки для Linux
  • Отладка MariaDB с отладчиком
  • Создание файла трассировки
  • Использование ASAN с MariaDB
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API