我可以从gtkmm和glibmm运行时诊断消息中获取行号或堆栈跟踪吗



我正在使用gtkmm和glibmm编写一个玩具程序,这是GTK和Glib的C++绑定。我收到一些运行时诊断消息。它们看起来像这样:

(process:2933): GLib-GObject-CRITICAL **: 16:19:16.920: g_object_set_qdata_full: assertion 'quark > 0' failed

大多数时候,标题格式已经包括pid和filename。不过,我也想看看相应来源的一些行号。有可能吗?

请不要把它读成一个X-Y问题,或者不要固定在一条特定的信息上。由于我定期遇到——并最终设法修复了——其中的许多。

正如运行GLib应用程序中所说,将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.out

最新更新