gpt4 book ai didi

c - 如何控制 glib 中调试信息的级别?

转载 作者:太空狗 更新时间:2023-10-29 17:18:04 24 4
gpt4 key购买 nike

我有一个用 C 语言用 glib/gobject 编写的库。它通过 g_debug() 调用产生大量调试信息。此信息对于故障排除非常有帮助,但是当库包含在实际应用程序中时,我不希望显示它。所以,基本上我需要一种方法来控制/过滤调试信息的数量,但我无法弄清楚它应该如何与 glib 一起工作。有人能给我指出正确的方向吗?

最佳答案

您可以尝试设置 G_DEBUG 环境变量,如 GLib 开发者网站中所述。请引用http://developer.gnome.org/glib/2.28/glib-running.html运行和调试GLib应用程序下的环境变量部分。 .

编辑:更新以在代码中设置记录器。您可以使用 g_log_set_handler ( http://developer.gnome.org/glib/2.29/glib-Message-Logging.html#g-log-set-handler ) 在您的代码中执行此操作。最初,您可以将日志处理程序设置为一个不显示任何内容的虚拟函数,然后您可以根据为设置适当的日志级别传递的参数将日志处理程序设置为 g_log_default_handler。要将日志级别设置为高于设定级别,您需要根据需要操作 GLogLevelFlags 值。
希望下面的代码示例能提供一些指导

#include <glib.h>
#include <stdio.h>
#include <string.h>

#define G_LOG_DOMAIN ((gchar*) 0)

static void _dummy(const gchar *log_domain,
GLogLevelFlags log_level,
const gchar *message,
gpointer user_data )

{
/* Dummy does nothing */
return ;
}

int main(int argc, char **argv)
{
/* Set dummy for all levels */
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_MASK, _dummy, NULL);
/* Set default handler based on argument for appropriate log level */
if ( argc > 1)
{
/* If -vv passed set to ONLY debug */
if(!strncmp("-vv", argv[1], 3))
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, g_log_default_handler, NULL);
}
/* If -v passed set to ONLY info */
else if(!strncmp("-v", argv[1], 2))
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, g_log_default_handler, NULL);
}
/* For everything else, set to back to default*/
else
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_MASK, g_log_default_handler, NULL);
}

}
else /* If no arguments then set to ONLY warning & critical levels */
{
g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING| G_LOG_LEVEL_CRITICAL, g_log_default_handler, NULL);
}

g_warning("This is warning\n");
g_message("This is message\n");
g_debug("This is debug\n");
g_critical("This is critical\n");
g_log(NULL, G_LOG_LEVEL_INFO , "This is info\n");
return 0;
}

希望这对您有所帮助!

关于c - 如何控制 glib 中调试信息的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com