C 检查何时修改变量

C 检查何时修改变量,c,linux,debugging,gcc,x86,C,Linux,Debugging,Gcc,X86,在Linux中使用Valgrind或任何其他调试器,如何查看修改变量的位置。我正在使用gcc。注意,我不想使用gdb单步进入代码。我只想运行程序,让调试器在最后报告我,在代码中修改变量的地方 嗯,想想看,它不是完全的复制品,因为它要求更多一点。因此: 使用gdb 找到您想要监视的地址(硬件监视点仅用于监视地址,因此您必须将其运行到变量或对象实例化的点,获取它们的地址并对该地址使用watch命令 将命令附加到地址,以向您提供回溯跟踪(或您需要收集的任何其他信息)并继续 所以你会有这样的想法: p

在Linux中使用Valgrind或任何其他调试器,如何查看修改变量的位置。我正在使用gcc。注意,我不想使用gdb单步进入代码。我只想运行程序,让调试器在最后报告我,在代码中修改变量的地方

嗯,想想看,它不是完全的复制品,因为它要求更多一点。因此:

  • 使用gdb
  • 找到您想要监视的地址(硬件监视点仅用于监视地址,因此您必须将其运行到变量或对象实例化的点,获取它们的地址并对该地址使用
    watch
    命令
  • 将命令附加到地址,以向您提供回溯跟踪(或您需要收集的任何其他信息)并继续
  • 所以你会有这样的想法:

    p &variable
    watch *$$
    cmd
    bt
    c
    end
    
    (我不能完全确定使用
    $$
    ,我通常使用
    p
    命令打印的
    $n

    用于在gdb中执行此操作。您必须知道要监视的变量的地址。使用以下一系列命令设置监视点:


    您还可以选择将所有这些输出保存到日志文件。查看更多详细信息。

    如果变量在许多地方被修改(例如,在紧密循环中),则可能会重复这将是无法忍受的缓慢。我想说的是,只有在你万不得已的情况下才使用这种方法。如果你想跟踪变量的变化,它不会那么慢,因为上面的观察点通常是一个硬件观察点。软件观察点(例如,观察t[I])如果你加上
    cmd/bt/c/end
    ,它会变慢。是回溯打印减慢了速度,而不是观察点。同意。因此,这取决于变量是否经常变化。
     watch *0xfeedface
     commands
     silent
     bt
     cont
     end