Lubię, gdy GDB ustawia punkt przerwania, gdy zmienna równa się pewnej wartości, którą ustawiłem, próbowałem tego przykładu:
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i)
printf("%d\n", i);
return 0;
}
Wyjście z GDB:
(gdb) break if ((int)i == 5)
No default breakpoint address now.
(gdb) run
Starting program: /home/SIFE/run
0
1
2
3
4
5
6
Program exited normally.
(gdb)
Jak widzisz, GDB nie dokonał żadnego punktu przerwania, czy jest to możliwe w przypadku GDB?
(gdb) watch i No symbol "i" in current context.
i
istnieje. Spróbujbreak main
,run
,c
,s
(krok, aby upewnić się ominąć deklaracji), a następnie polecenia na odpowiedź. Pamiętaj, aby skompilować swój program z-g
flagą. (tj. z informacjami o debugowaniu)start <args>
, który jest podobnytb main
,run <args>
. Spowoduje to uruchomienie programu, umożliwiając łatwiejsze ustawianie punktów przerwania / oglądania.Najpierw musisz skompilować swój kod z odpowiednimi flagami, umożliwiając debugowanie w kodzie.
następnie po prostu uruchom kod za pomocą swojego ulubionego debuggera
pokaż mi kod.
(gdb) list 1 #include <stdio.h> 2 int main(void) 3 { 4 int i = 0; 5 for(i=0;i<7;++i) 6 printf("%d\n", i); 7 8 return 0; 9 }
przerwa w liniach 5 i wygląda, czy i == 5.
(gdb) b 5 Breakpoint 1 at 0x4004fb: file ex1.c, line 5. (gdb) rwatch i if i==5 Hardware read watchpoint 5: i
sprawdzanie punktów przerwania
(gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004004fb in main at ex1.c:5 breakpoint already hit 1 time 5 read watchpoint keep y i stop only if i==5
uruchomienie programu
(gdb) c Continuing. 0 1 2 3 4 Hardware read watchpoint 5: i Value = 5 0x0000000000400523 in main () at ex1.c:5 5 for(i=0;i<7;++i)
źródło
Istnieją punkty obserwacyjne dotyczące sprzętu i oprogramowania. Służą do czytania i pisania zmiennej. Musisz zapoznać się z samouczkiem:
http://www.unknownroad.com/rtfm/gdbtut/gdbwatch.html
Aby ustawić punkt obserwacyjny, najpierw musisz złamać kod w miejscu, w którym varianle i jest obecny w środowisku, i ustawić punkt obserwacyjny.
watch
Polecenie służy do ustawiania punktu obserwacyjnego do pisania, podczasrwatch
czytania iawatch
do czytania / pisania.źródło