Как следует из названия, я столкнулся с некоторыми странными сбоями, очевидно, вызванными Pango или связанными с ним.
Моя программа работает корректно, все делает вовремя, никаких странных визуальных глюков или каких-либо других ошибок, НО такого рода ошибки приводят, как правило, к краху. Иногда он просто генерирует исключение и продолжает работу, но примерно 10% этих исключений заканчиваются сбоем, не говоря уже о том, что я понятия не имею, что может быть причиной этого.
Вот несколько логов разных попыток:
Самый распространенный:
(App:23224): Pango-CRITICAL **: pango_layout_set_width: assertion 'layout != NULL' failed
(App:23224): Pango-CRITICAL **: pango_layout_get_width: assertion 'layout != NULL' failed
(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed
(App:23224): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed
(App:23224): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed
./Def:822: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
Gtk.main()
(App:23224): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed
Более или менее распространенный...
(App:22385): Pango-CRITICAL **: pango_layout_is_wrapped: assertion 'layout != NULL' failed
(App:22385): Pango-CRITICAL **: pango_layout_is_ellipsized: assertion 'layout != NULL' failed
./Def:820: Warning: g_object_ref: assertion 'G_IS_OBJECT (object)' failed
Gtk.main()
(App:22385): Pango-CRITICAL **: pango_layout_get_extents: assertion 'layout != NULL' failed
И самое странное:
Pango:ERROR:/build/buildd/pango1.0-1.36.3/./pango/pango-layout.c:3916:pango_layout_check_lines: assertion failed: (!layout->log_attrs)
Последнюю видел только 1 раз, остальные ошибки вроде обычные.
По иронии судьбы, последний появился, когда мое приложение было еще живо в течение рекордного времени, а затем эта ошибка внезапно закончилась, даже без "общих" ошибок...
Любые идеи, что может происходить?
Как я уже говорил, мое приложение работает как надо, пока одна из вышеперечисленных ошибок не завершит его.
Больше информации:
- Мое приложение является многопоточным, но эта ошибка, похоже, не связана с потоками... иначе что-то еще должно жаловаться!
G_DEBUG=fatal-warnings
для прерывания работы gdb всякий раз, когда появляется предупреждение для помощи в отладке. У меня есть ощущение, что ваша попытка использовать GTK + с несколькими потоками вызывает это. - person andlabs   schedule 04.12.2016