GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page
  • Конструктор GObject
  • Графическое инспектирование GObjects
  • Отладка проблем связанных с подсчётом ссылок
  • Создание документации API

Was this helpful?

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

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

PreviousКак пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)NextGtkApplication и GtkApplicationWindow

Last updated 6 years ago

Was this helpful?

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

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

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

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

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

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

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

static volatile GObject *g_trap_object_ref;

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

Создание документации 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.

GOB/
G-Inspector
refdbg/
g_object_ref
g_object_unref
документация