我必须调试一个严重依赖 Gtk 的程序。问题是由于某些原因,在使用 GtkWindow
对象时开始出现许多运行时警告。问题是,即使 Gtk 提示严重错误,它也不会因这些错误而中止。我没有代码库的更改历史记录,所以我唯一的选择似乎是遍历所有似乎可疑的 gtk 调用并查看问题出在哪里。但是,如果我能以某种方式导致 Gtk 因这个错误而中止,我可以用 gdb 运行它并尝试获取回溯并找到错误的确切位置。知道如何做到这一点吗?
GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GObject'
GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed
最佳答案
我正在收集 Matt 提到的方法和我发现的方法以在此处提供完整的答案。我会将其标记为已选择的答案并对 Matt 的答案投赞成票。
强制 gtk 在出错时进行 agort 的三种方法:
G_DEBUG=fatal_warnings ./myprog ...
./myprog -prog-args --g-fatal-warnings
- 使用 g_log_set_handler 和/或 g_log_default_handler 并提供您自己设计的 GLogFunc,它根据为每条消息传递给它的 GLogLevelFlags 中止。
我还应该提到 g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING);
以使列表完整,即使“总是致命”不是我想要的。
关于导致 Gtk 在断言时中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646510/