【问题标题】:How do I get GDB to break on a GLib assertion failure?如何让 GDB 在 GLib 断言失败时中断?
【发布时间】:2011-04-26 04:21:59
【问题描述】:

在我没有编写(但我正在尝试调试)的大量代码中的某处,GLib 库中的断言失败:

(process:31987): GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed

但是,GDB 和代码仍在继续。我希望 GDB 打破这个断言失败的地方,以便我可以找出它失败的原因。我没有得到更多关于这个断言在哪里的信息。有没有办法让 GDB 在这种失败时中断?

【问题讨论】:

标签: debugging gdb glib


【解决方案1】:

你应该像这样添加一个环境变量:

G_DEBUG=fatal_warnings gdb ...

【讨论】:

  • G_DEBUG=fatal-errors 对我不起作用,但 G_DEBUG=fatal-warningsG_DEBUG=fatal-criticals 对我有用,也请查看 rest of options。 gdb 的行可以是 gdb --args PROGRAM ARG1 ARG2,然后在 gdb 中发出命令:set env G_DEBUG=fatal-criticals,然后是 run
【解决方案2】:

打破g_log()。这涵盖了所有情况,如g_warning()g_critical() 等。

【讨论】:

  • 有用的 gdb 命令有:break g_log if log_level == G_LOG_LEVEL_CRITICALbreak g_log if log_level == G_LOG_LEVEL_WARNING
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2023-03-07
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多