【发布时间】:2016-12-04 07:07:24
【问题描述】:
正如标题所说,我遇到了一些奇怪的崩溃,显然是由 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+ 与多线程一起使用会导致这种情况。 -
我必须同意 andlabs,这有强烈的多线程问题的味道。
-
我也是这么想的,但是我没有任何其他想法来持续监控进度,同时更新进度条!同时,我会看看 gdb 是否检测到其他东西......
-
使用基本 C 类型通过线程共享值。 GTK(像大多数 tolkits 一样)不是线程安全的,因此尝试在主线程之外更新小部件可能会导致奇怪的问题。
-
我不完全理解您的评论...如果我分享我的价值,这实际上是可能的,我无论如何都无法更新我的 ProgressBar,因为我需要设置一个监视器循环会不断更新我的 ProgressBar,导致 Gtk.main() 冻结,这也会冻结我的小部件,所以“0% 到 100%”的 ProgressBar 有点没用......
标签: multithreading python-2.7 gtk critical-section pango