C 使用valgrind和gdb跟踪变量变化

C 使用valgrind和gdb跟踪变量变化,c,memory-leaks,gdb,valgrind,C,Memory Leaks,Gdb,Valgrind,我有一个程序,它在执行超过5个小时后会发出信号。这很可能是由valgrind检查后的内存泄漏引起的,但根据valgrind报告,我有问题跟踪到底是哪个变量导致了这个问题,valgrind报告只包含地址和 我尝试使用valgrind和gdb来逐步完成。然而,由于在循环428轮后需要5小时才能到达泄漏点,我想设置一个断点,比如说,当循环=428时,然后进入代码。我该怎么做 根据下面一个简单的程序,我可以知道 a如何跟踪变量“a”中值的变化 b循环=428时如何设置断点 a设置该循环的断点,如果可以执

我有一个程序,它在执行超过5个小时后会发出信号。这很可能是由valgrind检查后的内存泄漏引起的,但根据valgrind报告,我有问题跟踪到底是哪个变量导致了这个问题,valgrind报告只包含地址和

我尝试使用valgrind和gdb来逐步完成。然而,由于在循环428轮后需要5小时才能到达泄漏点,我想设置一个断点,比如说,当循环=428时,然后进入代码。我该怎么做

根据下面一个简单的程序,我可以知道

a如何跟踪变量“a”中值的变化

b循环=428时如何设置断点


a设置该循环的断点,如果可以执行以下操作:

if(loop == 428)
    int nop = 0;
然后设置线int nop=0的断点。这样,程序仅在循环428中执行该行时停止


b我不确定这件事。您在哪里尝试检查“p”的值?。

a要设置该循环的断点,如果可以执行以下操作:

if(loop == 428)
    int nop = 0;
然后设置线int nop=0的断点。这样,程序仅在循环428中执行该行时停止

b我不确定这件事。您在哪里尝试检查“p”的值?。

来自GDB中的帮助中断:

要在某个条件上设置断点,请使用中断if条件,在您的情况下,中断if循环计数器==428或类似值。

来自GDB中的帮助中断:


要在条件上设置断点,请使用break if condition,在您的情况下,break if loop_counter==428或类似值。

对于第一个问题,如何跟踪变量“a”中值的变化? 请用手表

watch [-l|-location] expr [thread threadnum] [mask maskvalue]
为表达式设置观察点。当程序写入表达式expr且其值更改时,gdb将中断。此命令最简单也是最常用的用法是监视单个变量的值:

      (gdb) watch foo
约阿希姆·皮莱堡回答了你的第二个问题

对于你的第三个问题,你需要在底线处设置一个中断

 p->data = (stdata*) malloc (sizeof(stdata));

然后试着打印p的值。

对于第一个问题,如何跟踪变量“a”中值的变化? 请用手表

watch [-l|-location] expr [thread threadnum] [mask maskvalue]
为表达式设置观察点。当程序写入表达式expr且其值更改时,gdb将中断。此命令最简单也是最常用的用法是监视单个变量的值:

      (gdb) watch foo
约阿希姆·皮莱堡回答了你的第二个问题

对于你的第三个问题,你需要在底线处设置一个中断

 p->data = (stdata*) malloc (sizeof(stdata));
然后尝试打印p的值

要跟踪变量值的变化,可以在该变量上设置观察点

对于您的情况,使用:watchp->data->a[index]

若要在所需条件下断开,可在循环计数器==428时使用“断开-断开”

要跟踪变量值的变化,可以在该变量上设置观察点

对于您的情况,使用:watchp->data->a[index]

若要在所需条件下断开,可在循环计数器==428时使用“断开-断开”


我甚至都不知道这件事。谢谢我甚至都不知道这件事。谢谢