SQLite инициализируется с помощью функции sqlite3_initialize()
, которая вызывается автоматически, когда пользователь вызывает различные функции, такие как sqlite3_open()
, хотя при последующих вызовах он не используется.Эта функция в свою очередь вызывает специфическую для ОС функцию инициализации sqlite3_os_init()
.Это функция, которая инициализирует все VFS, встроенные в SQLite.
Для приведенного примера VFS добавьте test_vfstrace.c к объединению и затем поместите такой вызов в sqlite3_os_init()
прямо перед оператором return:
vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
Затем создайте библиотеку с этими изменениями.
Значение последнего параметра 1
сделает эту VFS по умолчанию, поэтому если вы не хотите, чтобы сообщения трассировки печаталисьдля каждой операции SQLite, выполняемой через код, связанный с библиотекой, которую вы только что создали, измените ее на 0
и явно укажите эту VFS при открытии базы данных для отслеживания вызовов.Например, укажите SQLITE_USE_URI
параметр времени компиляции , а затем передайте имя файла form : "file:database.db?vfs=unix"
, где "database.db
" - фактическое имя файла дляоткрыт.