![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Следующее это ассортимент методов, используемых разработчиками SQLite,
чтобы проследить, исследовать и понять поведение основной библиотеки SQLite.
Эти методы разработаны, чтобы помочь в понимании самой основной библиотеки
SQLite, не запросов, это просто использует SQLite.
Используйте ".eqp full" в
оболочке командной строки.
Когда у вас есть скрипт SQL, который вы отлаживаете или пытаетесь понять,
часто полезно выполнить его в командной строке с
опцией ".eqp full". Когда ".eqp" = FULL, оболочка автоматически показывает
вывод EXPLAIN и
EXPLAIN QUERY PLAN
для каждой команды до того, как на самом деле выполнить команду.
Для удобочитаемости также установите ".echo on",
чтобы вывод содержал оригинальный код на SQL.
Новая команда ".eqp trace" делает все, что ".eqp full", а также включает
трассировку VDBE. Используйте варианты времени компиляции, чтобы
позволить функции отладки.
Предложенные варианты времени компиляции включают:
SQLITE_ENABLE_TREETRACE и SQLITE_ENABLE_WHERETRACE
не зарегистрированы в документе вариантов времени
компиляции, потому что они официально не поддерживаются. Они активируют
команды ".treetrace" и ".wheretrace" в оболочке
командной строки, которые обеспечивают трассировочную информацию низкого
уровня для логики, которая производит код для SELECT, DML и WHERE.
Вызовите sqlite3ShowExpr() и подобное из отладчика.
Когда собрано с SQLITE_DEBUG, SQLite
включает код, который распечатает различные внутренние структуры дерева
абстрактного синтаксиса как графы ASCII. Это может быть очень полезно в
отладке, чтобы понять переменные, с которыми работает SQLite.
Следующий код доступен:
Это не API и подвержено изменениям. Они только для
интерактивного использования отладки. Точки останова для test_addoptrace
Отлаживая генератор bytecode,
часто полезно знать, где конкретный код операции производится.
Чтобы легко найти это, управляйте скриптом в отладчике.
Установите точку останова на "test_addoptrace".
Затем выполните "PRAGMA vdbe_addoptrace=ON;",
сопровождаемый рассматриваемым SQL-оператором. Каждый код операции
будет показан, как он передан программе VDBE, и точка останова будет
срабатывать немедленно после того. Шаг до достижения кода операции
смотрит назад в стеке, чтобы видеть, где и как это было произведено.
Это работает только, когда собрано с
SQLITE_DEBUG. Используйте команды оболочки ".treetrace" и ".wheretrace".
Когда оболочка командной строки и основная библиотека SQLite собраны с
SQLITE_DEBUG,
SQLITE_ENABLE_TREETRACE и SQLITE_ENABLE_WHERETRACE,
у оболочки есть две команды, чтобы включить
средства отладки для большинства запутанных частей генератора кода,
логика, имеющая дело с операторами SELECT и операторами Where,
соответственно. ".treetrace" и ".wheretrace" приказывают, чтобы каждая
взяла числовой аргумент, который может быть выражен в шестнадцатеричном виде.
Каждый бит включает различные части отладки. Значения "0xfff" и "0xff"
обычно используются. Используйте аргумент "0", чтобы отключить
всю трассировочную информацию. Используйте команду оболочки ".breakpoint"
Команда ".breakpoint" в CLI действительно только вызывает процедуру,
названную "test_breakpoint()", которая ничего не делает.
Если у вас есть скрипт, и вы хотите начать отлаживать в какой-то момент на
полпути скрипта, просто установите точку останова в gdb (или безотносительно
отладчика, который вы используете) на функцию test_breakpoint() и
добавьте команду ".breakpoint", где вы хотите остановиться.
Когда вы достигаете той первой точки останова, устанавливаете любые
дополнительные точки останова, трассировку переменных,
в которых вы нуждаетесь.
Выключите
распределитель памяти
Ища проблемы выделения памяти (утечки памяти, ошибки использования после
освобождения, переполнение буфера и т.д.), иногда полезно выключить
распределитель памяти, затем выполнить
тест под valgrind, MSAN или некоторым другим средством отладки памяти кучи.
Рапределитель памяти может быть выключен во время запуска, используя
интерфейс
SQLITE_CONFIG_LOOKASIDE. Оболочка командной строки
будет использовать тот интерфейс, чтобы отключить хранение, если это будет
начато с опцией "--lookaside 0 0".
Choose any three.
Советы для отладки SQLite