每当我关闭 Gtk# 应用程序时,我都会得到以下信息:
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-WARNING **: g_set_prgname() called multiple times
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_signal_handlers_disconnect_matched: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
(/home/matthew/opensbs/OpenSBS/bin/Debug/OpenSBS.exe:5050): GLib-GObject-CRITICAL **: g_object_ref: assertion `object->ref_count > 0' failed
Run Code Online (Sandbox Code Playgroud)
我不确定这里发生了什么。我在 google 上发现了一个有类似问题的人,但他们似乎是应用程序的用户,而不是开发人员。一个想法?
有什么好乱的。
g_set_prgname() 是一个内部例程,通常只由程序初始化程序调用,如 gdk_init() 或 gtk_init()(调用 gdk_init())。所以如果它被调用两次,那么,它不应该。我阅读了您的回答,也许某些 Glade 初始化例程正在冗余调用它。了解您正在运行的 Glade 和 GTK 版本会有所帮助。
至于其他消息... GLib/GObject 是一个对象系统,具有单继承和 RTTI(运行时类型识别),用 C 实现。
这些警告/关键对表明您的某些对象指针在 RTTI 测试中非常失败。这样的测试在 GTK/GDK 内部很常见——比如“我希望这个指针是这样的,但在我那样对待它之前我最好确定一下。” 你看到的每个消息对都表明一个指针已经被传递给这样的例程,但它所指向的不仅不是预期的对象类型,它甚至没有指向 RTTI 系统识别的任何东西,所以 RTTI 系统举手投足.
这种指针失败的最有可能的罪魁祸首是: