我正在使用gtkmm和glibmm编写一个玩具程序,这是GTK和Glib的C++绑定。我收到一些运行时诊断消息。它们看起来像这样:
(process:2933): GLib-GObject-CRITICAL **: 16:19:16.920: g_object_set_qdata_full: assertion 'quark > 0' failed大多数情况下,标题格式已经包含了pid和文件名。但是,我也希望看到相应源代码的行号。有可能吗?
请不要将此理解为X-Y问题的形式,或者不要固定在特定的消息上。因为我经常会遇到--并最终设法修复--很多这样的问题。
发布于 2021-11-24 11:39:13
正如中所说的,将env G_DEBUG设置为包含“致命警告”或“致命临界”将允许程序在遇到此类诊断时发出信号SIGTRAP。在调试器中捕获此信号可能有助于查看堆栈等。
示例用法:
# to dump stack upon first critical diagnostic and quit
G_DEBUG=fatal-criticals gdb -batch -ex "run" -ex "i stack" ./a.out
# or upon first and second critical and or warning diagnostic whichever comes earlier
G_DEBUG=fatal-warnings gdb -batch -ex "run" -ex "i stack" -ex "cont" -ex "i stack" ./a.outhttps://stackoverflow.com/questions/70093633
复制相似问题