gpt4 book ai didi

logging - 为什么 GLib 在递归日志下中止?

转载 作者:行者123 更新时间:2023-12-02 17:11:24 26 4
gpt4 key购买 nike

大多数时候我的 GLib 程序运行良好。但是,当日志像

**(进程:pid):消息(递归):blah lah blah

出现,程序将中止。

GLib 手册说 G_LOG_FLAG_RECURSION 默认被认为是致命的。

但我就是不明白“递归消息”是什么意思?什么时候会出现递归消息?

谢谢

最佳答案

浏览 glib/gmessages.c 给我一个非常强烈的印象:如果 g_logv() 需要自己记录错误,则设置 G_LOG_FLAG_RECURSION

考虑内存不足;当内存分配尝试失败时,程序将尝试记录内存分配失败,并可能退出。当日志记录例程尝试分配内存来记录消息时,它可能会失败。因此,日志记录例程会跟踪它们被调用的“深度”,并切换内存分配策略(它们在堆栈上而不是堆上分配)(如果是递归日志记录调用)。

每当日志例程收到错误消息并想要记录该错误时,就会发生一些非常的糟糕情况,因此尝试使用另一种机制进行日志记录然后退出是有意义的。

所以您可能只是看到了真正问题的遥远症状。您可以使用ltrace(1)来尝试发现问题,或者您可以启用核心转储(ulimit -c unlimited)并尝试查找导致该问题的调用链使用 gdb 的 bt 命令使程序崩溃。

关于logging - 为什么 GLib 在递归日志下中止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616884/

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