gpt4 book ai didi

c - 用于测试、报告或调试的 GLib/GObject 拦截错误/结构代码

转载 作者:行者123 更新时间:2023-11-28 21:31:51 26 4
gpt4 key购买 nike

情况:

我正在工作中升级一些代码。该代码适用于基于 GMime 的进程。我们目前使用 GMime 2.2,我最近升级了我们的代码以使用 GMime 2.4。过程运行得很好,没有崩溃,但我得到了一个

GLib-GObject-CRITICAL **:g_object_unref:断言 G_IS_OBJECT(对象)' 失败

不时地在程序运行时。

有时调用 g_object_unref 会失败并使我的程序崩溃。我正在尝试对此进行调试,但不幸的是,制作此程序的人没有添加任何测试或调试功能。

我知道并理解当您必须返回到旧代码时嵌入调试信息或设置测试框架的重要性。我知道如何在纯 C 或纯 C++ 中设置它,但是一旦将其他库投入其中,它就会变得非常困难。

我的问题是:

如何使用依赖于 GLib 或 GObject 的程序有效地设置调试代码和/或测试系统?

我的问题是:

  1. 我如何知道代码中发生了什么?我应该听“信号”吗?如何设置这些信号?
  2. g_object_unref 等函数返回 void。那么我该如何输出这些函数相关的调试信息呢?
  3. GObject 是否有一个“属性/类成员”,我不知道与 GLib 相关的正确术语,其中嵌入了错误信息?
  4. (相关,但略微偏离主题)像 GLib 和 node.js 等库有“广泛的”文档,相当于:

    function doSomethingThatShouldBeUsefulAndUnderstoodByAnyoneWhoReadsT​​his(WYSIWYG, FIY, BYOF, X, Y, Z)//这个函数做了一些有用的事情,任何读过这个函数的人都能理解它做了一些事情并且可以调用

    当大多数教程将您引回文档或文档本身时,拥有大量编程经验(使用纯形式的语言)的人如何着手制作图书馆的头或尾?

    /li>
  5. 有推荐的教程吗?

我浏览过的网站:

非常感谢任何和所有评论、问题和建议!

谢谢。

最佳答案

我知道调试此类问题的最简单方法是在调试器下运行程序并在 g_logv 上中断(该错误消息是用 g_logv 打印的),当调试器捕获对 g_logv 的调用时,您可以获得回溯查看您在程序中的位置。

通常这些类型的错误发生在程序员试图在 NULL 指针上调用 g_object_unref() 时。

也就是说,您只升级到 GMime 2.4 而不是 GMime 2.6 是有原因的吗? 2.6 已经出来好几年了,是维护得最好的系列。

关于c - 用于测试、报告或调试的 GLib/GObject 拦截错误/结构代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18093468/

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