Spec-Zone .ru
спецификации, руководства, описания, API

21.4.8. MySQL, Connector/C ++ Трассировка Отладки

Хотя отладчик может использоваться, чтобы отладить Ваше приложение, можно счесть выгодным, чтобы включить трассировки отладки соединителя. Некоторые проблемы происходят в произвольном порядке, который делает их трудными отладить использование отладчика. В таких случаях трассировки отладки и файлы протокола более полезны, потому что они позволяют Вам прослеживать действия всех экземпляров Вашей программы.

DTrace является очень мощной технологией, чтобы проследить любое приложение, не имея необходимость разрабатывать дополнительный модуль трассировки для Вашего приложения. К сожалению, DTrace в настоящий момент только доступен на Солярисе, Mac OS X 10.5, и FreeBSD.

MySQL, Connector/C ++, может записать два файла трассировки:

  1. Файл трассировки сгенерирован клиентской библиотекой MySQL

  2. Файл трассировки, сгенерированный внутренне MySQL, Connector/C ++

Первый файл трассировки может быть сгенерирован базовой клиентской библиотекой MySQL (libmysqlclient). Чтобы включить этой трассировке, соединитель вызовет mysql_debug() C API-функция внутренне. Поскольку только отладочные версии клиентской библиотеки MySQL способны к записи файла трассировки, скомпилируйте MySQL, Connector/C ++ против отладочной версии библиотеки, чтобы использовать эту трассировку. Трассировка показывает внутренние вызовы функции и адреса внутренних объектов как показано здесь:

>mysql_stmt_init| >_mymalloc| | enter: Size: 816| | exit: ptr: 0x68e7b8| <_mymalloc | >init_alloc_root| | enter: root: 0x68e7b8| | >_mymalloc| | | enter: Size: 2064| | | exit: ptr: 0x68eb28[...]

Вторая трассировка является MySQL, Connector/C ++ внутренняя трассировка. Это доступно с отладкой, и неотладка создает из соединителя, пока Вы включили модулю трассировки, во время компиляции используя cmake -DMYSQLCPPCONN_TRACE_ENABLE:BOOL=1. По умолчанию трассировка функциональности не доступна и вызывает, чтобы проследить функции, удаляются препроцессором.

Компиляция соединителя с трассировкой функциональности, добавленной причины два дополнительных вызова функции трассировки на каждый вызов функции соединителя. Например:

|  INF: Tracing enabled<MySQL_Connection::setClientOption>MySQL_Prepared_Statement::setInt|  INF: this=0x69a2e0|  >MySQL_Prepared_Statement::checkClosed|  <MySQL_Prepared_Statement::checkClosed| <MySQL_Prepared_Statement::setInt[...]

Выполните свой собственный сравнительный тест, чтобы узнать, насколько это будет воздействовать на производительность Вашего приложения.

Простой тест, используя цикл, работающий 30 000 INSERT SQL-операторы не показали существенного воздействия в реальном времени. Две разновидности этого приложения, используя включенную трассировку и трассировку отключенная версия соединителя, выполняемого одинаково хорошо. На время выполнения, измеренное в режиме реального времени, не значительно воздействовали пока запись, что трассировка отладки не была включена. Однако, будет различие во время, проведенное в приложении. При записи трассировки отладки подсистема ввода-вывода может стать узким местом.

В сводке соединитель использования создает с трассировкой включенного тщательно. Поддерживающие трассировку версии могут вызвать более высокое использование ЦП, даже если на общее время выполнения Вашего приложения не воздействуют значительно.

Пример от examples/debug_output.cpp демонстрирует, как активировать трассировки отладки в Вашей программе. В настоящий момент они могут только быть активированы через вызовы API. Трассировками управляют на основе для каждого подключения. Можно использовать setClientOptions() метод соединения возражает, чтобы активировать и деактивировать генерацию трассировки. Клиентская трассировка библиотеки MySQL всегда пишется файлу, тогда как сообщения протокола соединителя печатаются к стандартному выводу.

sql::Driver *driver;int on_off = 1;/* Using the Driver to create a connection */driver = get_driver_instance();std::auto_ptr< sql::Connection > con(driver->connect(host, user, pass));/*Activate debug trace of the MySQL client library (C API)Only available with a debug build of the MySQL client library!*/con->setClientOption("libmysql_debug", "d:t:O,client.trace");/*Connector/C++ tracing is available if you have compiled thedriver using cmake -DMYSQLCPPCONN_TRACE_ENABLE:BOOL=1*/con->setClientOption("client_trace", &on_off);