Pirate
(Pirate)
1
在cli里面运行GTK+的窗口程序时,会显示警告。查了一下,说是一个由来已久的bug,例如:
$ xsensors
(xsensors:3148): topmenu-module-CRITICAL **: gtk_module_init: assertion '!already_initialized' failed
不知道这个事是不是已经解决了。
参考:
https://bugs.launchpad.net/ubuntu/+source/libcanberra/+bug/1075928
https://askubuntu.com/questions/197549/all-gtk-applications-opened-with-warning-assertion-gdk-error-traps-null-fa
根据 xfce4-topmenu-plugin 的设计,这貌似是正常现象
在 xfce4-topmenu-plugin 中,gtk_module_init()
函数负责初始化工作。为了避免该函数被重复调用,设置一个标志布尔变量 already_initialized
,初始值为 FALSE
。并在 gtk_module_init()
中使用 g_return_if_fail(!already_initialized)
检测之前是否调用过该函数。
这样一来,如果之前已经调用过该函数,already_initialized
的值为 TRUE
,!already_initialized
为 FALSE,从而通过 g_return_if_fail()
提前退出,避免重复初始化。
这里不太明白的是,作者为何要使用 g_return_if_fail(),而不使用简单的 if (already_initialized) return
。后者会静悄悄地完成工作,而前者会在应用程序的标准输出中打印显眼的错误信息,如主贴所示。检测重复加载并不算“错误”信息。根据 glib 文档,g_return_if_fail() “如果您只是意味着 “if(error)return”,则不应该使用它们,只有当您的意思是“if(程序中的错误)返回”时才应该使用它们)”
这些是其它应用程序的问题,可能与您的问题无关
Pirate
(Pirate)
3
vickycq看问题真细致啊,真不知道去哪找那么详细的信息。看懂了你的分析,看来代码不改的话,这种警告总会存在的。可能在CLI里启动窗口程序的情境不多吧,没人重视这个bug。
我能经常遇到这些讨厌的警告是因为经常用texdoc
察看LaTeX的宏包文档。在evince
打开文档的时候就列出一堆类似的警告。