【问题标题】:gdb watchpoint on struct variables结构变量上的 gdb 观察点
【发布时间】:2012-06-05 15:23:46
【问题描述】:

我有这样的结构:

    struct A 
    {
        int a; 
        char b; 
    };

这个结构在大代码的不同地方被引用。指向这个结构的指针被传递给不同的函数,因此这个结构中的变量被更新。我想在这个结构中的变量 a 上设置一个观察点,因为它遍历许多函数。看看如何变化。如何设置此观察点?

【问题讨论】:

    标签: linux gdb watchpoint


    【解决方案1】:

    在调试我的虚拟内存模拟器时,我遇到了同样的问题。问题是如何密切关注结构中的数据。

    我试过用 print 来检查,但太吵了。因为我必须打印出超过 15 个变量。

    我也尝试过使用观察点,但在我的机器上,我只能设置不超过 4 个硬件观察点。这甚至不接近我的目标。

    最后,我通过在 .gdbinit 文件中使用用户定义的函数找到了我的解决方案。例如如果我想查看我的结构数组,请使用

    define lookintoStructs
        if mystruct != 0x0
            print mystruct[0]
            print mystruct[1]
            print mystruct[2]
            print mystruct[3]
            print mystruct[4]
            print mystruct[5]
        end
    end
    

    为了使用起来更方便,我想让它挂钩到我在 gdb 中的下一条指令。

    define hook-next
        lookintoStructs
    end
    

    所以当我在 gdb 中调用 next 或 n 时,lookintoStructs 可以自动调用。对我来说很好。

    【讨论】:

      【解决方案2】:

      首先设置一个断点,您可以在其中使用break创建一个结构实例,例如

      break myfile.c:9
      

      然后只需使用 watch 设置观察点,例如

      watch myStructInstance.a
      

      对于变量a

      watch *0x7ffff75177f0
      

      用于内存地址。使用print可以很方便的得到内存地址,比如

      print &myStructInstance.a
      

      现在每次修改变量 a 或给定的内存地址时,gdb 都会中断。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2011-11-15
        • 1970-01-01
        • 2021-11-06
        相关资源
        最近更新 更多