Об инструментах

Конструктор GObject

Создание GObjects может быть утомительной задачей. Требуется много печатать и даже copy/paste приносит много хлопот. Одной очевидной идеей является использование некоторого рода шаблонных заготовок для классов, а зтем запуск специального инструмента для генерации реального C файла. GOB/ (или GOB2) является таким инструментом. Это препроцессор который может быть использован для конструирования GObjects с действующим C кодом, поэтому нет необходимости редактировать сгенерерованный C код. Синтаксис в стиле Java и Yacc или Lex. Реализация преднамеренно сделана простой: действующий C код пользователя не анализируется.

Графическое инспектирование GObjects

Ещё один инструмент который может оказаться полезным при работе с GObjects - это G-Inspector. Он умеет отображать объекты Glib/Gtk+ и их свойства.

Отладка проблем связанных с подсчётом ссылок

Схема подсчёта ссылок используемая в GObject действительно решает многие проблемы управления памятью, но также добавляет новые ошибки в исходный код. В большинстве приложений, найти точно где счётчик ссылок Object может быть обработан не правильно, очень сложно. Хотелось бы надеяться что существующий инструмент с именем refdbg/ может использоваться для автоматического отслеживания недопустимого кода имеющего отношение к подсчёту ссылок. Это приложение перехватывает вызовы подсчёта ссылок и пытается обнаружить недопустимое поведение. Она поддерживает механизм фильтрации правил позволяя вам отслеживать только интересующие вас объекты и может использоваться совместно с gdb.

Помните что если GObject скомпилирован с параметром --enable-debug=yes, это экспортирует переменную прерывания программы в случае ошибки

static volatile GObject *g_trap_object_ref;

Если установлено в не-NULL значение, g_object_ref() и g_object_unref() будут перехвачены когда получат вызов с таким значением.

Создание документации API

API документация для большинства библиотек Glib, GObject, GTK+ и GNOME создаётся с помощью комбинации разных инструментов. Обычно, часть документации которая описывает поведение каждой функции извлекается из специально отформатированных комментариев исходного кода с помощью утилиты с названием gtk-doc которая генерирует docbook xml и соединяет этот docbook xml с набором master xml docbook файлов. Эти xml docbook файлы обрабатываются с помощью xsltproc (небольшая программа, часть библиотеки libxslt) для генерации заключительного html вывода. Другие инструменты могут использоваться для генерации pdf вывода из исходного xml. Следующий код выборочно показывает как выглядят такие комментарии.

/**
 * gtk_widget_freeze_child_notify:
 * @widget: a #GtkWidget
 * 
 * Stops emission of "child-notify" signals on @widget. The signals are
 * queued until gtk_widget_thaw_child_notify() is called on @widget. 
 *
 * This is the analogue of g_object_freeze_notify() for child properties.
 **/
void
gtk_widget_freeze_child_notify (GtkWidget *widget)
{
...

Более полная документация о том как установить и использовать gtk-doc в вашем проекте приведена на сайте разработчиков GNOME.

Last updated

Was this helpful?