Предотвратить остановку GDB на контрольных точках - PullRequest
3 голосов
/ 21 июля 2011

file main.c:

#include <stdio.h>

int main()
{
    int i;
    for (i=0; i<30 ;i++) {
            printf ("%d\n", i);
    }
    return 0;
}

В GDB я обычно устанавливаю точку останова, затем указываю точку наблюдения в качестве команды, которая будет выполняться на этой точке останова:

(gdb) break main
Breakpoint 1 at 0x4004b0: file main.c, line 6.
(gdb) command
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>watch i
>end

ВыполнениеОстановимся всякий раз, когда изменяется наблюдаемая переменная, проблема в том, что нет никакого способа (насколько мне известно) сказать gdb просто напечатать значение наблюдаемой переменной и продолжить, потому что это вложенная точка наблюдения.Если бы это была отдельная точка наблюдения, это легко сделать с помощью команды 'continue' (когда я в области видимости, если main ()):

(gdb) watch i
Hardware watchpoint 2: i
(gdb) command
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>continue
>end

Итак, есть ли способ для gdb не останавливаться?на вложенной точке наблюдения, и вывести только изменение значения?Или лучше да, чтобы указать команды, которые будут выполняться на вложенных точках наблюдения / останова?

Я также попытался 'установить жалобы 0' и 'установить подтверждение выключено' в GDBно безрезультатно

1 Ответ

2 голосов
/ 21 июля 2011

GDB не имеет понятия вложенных точек наблюдения.Все точки останова и наблюдения находятся на верхнем уровне, независимо от того, где вы их установили.

Вот что вы хотите:

(gdb) break main
Breakpoint 1 at 0x40052c: file t.c, line 6.
(gdb) commands
>watch i
>commands
 >c
 >end
>c
>end

Это устанавливает список команд на точке останова 1:

watch i
continue

И отдельный список команд на точке наблюдения (при его создании):

continue
...