#debugging #gdb #watchpoint
#отладка #gdb #точка наблюдения
Вопрос:
Кто-нибудь может сказать мне, в чем разница между break и tbreak в отношении контрольных точек?
У меня есть простой тестовый код :
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
int toto;
toto = 1;
toto = 2;
toto = 3;
return (EXIT_SUCCESS);
}
Когда я использую break в main (), затем watch, кажется, что toto переключается с 0 на 2 :
(gdb) break main
Breakpoint 1 at 0x804839a: file pp.c, line 6.
(gdb) r
Starting program: /mnt/mega20/SRC/C/gdb/pp
Breakpoint 1, main (argc=1, argv=0xbffff4f4) at pp.c:6
6 toto = 1;
(gdb) watch toto
Hardware watchpoint 2: toto
(gdb) c
Continuing.
Hardware watchpoint 2: toto
Old value = 0
New value = 2
main (argc=1, argv=0xbffff4f4) at pp.c:8
8 toto = 3;
(gdb)
Но когда я использую tbreak, часы, похоже, работают :
(gdb) tbreak main
Temporary breakpoint 1 at 0x804839a: file pp.c, line 6.
(gdb) r
Starting program: /mnt/mega20/SRC/C/gdb/pp
Temporary breakpoint 1, main (argc=1, argv=0xbffff4f4) at pp.c:6
6 toto = 1;
(gdb) watch toto
Hardware watchpoint 2: toto
(gdb) c
Continuing.
Hardware watchpoint 2: toto
Old value = 0
New value = 1
main (argc=1, argv=0xbffff4f4) at pp.c:7
7 toto = 2;
(gdb) c
Continuing.
Hardware watchpoint 2: toto
Old value = 1
New value = 2
main (argc=1, argv=0xbffff4f4) at pp.c:8
8 toto = 3;
(gdb)
Те же результаты с командой start, она работает.
Комментарии:
1. И… что вы использовали для компиляции переключателей? Какая версия gdb? Вы посмотрели значение команд gdb? …
2. «gcc -g3 -O0» с gdb 7.2 в Debian, и да.
3. Если добавить точку останова в main, запустите, удалите точку останова, добавьте точку наблюдения в toto и продолжайте, никаких проблем вообще. контрольная точка пропущена при toto = 1, только если точка останова определена в main.
Ответ №1:
Я предлагаю вам прочитать это: