Погружение в технику и философию gdb

       

реальная установка точек останова происходит только при начале выполнения программы


Аппаратные точки наблюдения на запись ячейки задаются командой "watch" ("wa"), команды "rwatch" ("rw") и "awatch" ("aw") устанавливают точки наблюдения на чтение и чтение/запись соответственно (например, "rw *0xBFFFFA50", а вот "rw *$esp" уже не срабатывает и отладчик сообщает "Attempt to dereference a generic pointer") . Как и в случае с точками останова по выполнению, сообщение "Hardware read watchpoint N: адрес" не означает ровным счетом ничего и при попытке запуска/продолжения выполнения программы отладчик может сказать: "Could not insert hardware watchpoint N", обламывая нас по полной программе.

Все точки наблюдения/останова могут быть условными, то есть срабатывать только в том случае, если значение выражения, стоящего после "if", истинно. Например, "b if $eax==0", или "rw *0xBFFFFA60 if (*((unsigned int*)$esp)!=0x669)".

При установке всякой точки наблюдения/останова отладчик присваивает ей номер, который, во-первых, высвечивается при ее срабатывании, а, во-вторых, может быть использован в командах управления точками наблюдения/останова. Номер последней сработавшей точки останова автоматически заносится в переменную $bpnum.

 

(gdb) hb main

Hardware assisted breakpoint 1 at 0x80483ef

(gdb) r

Starting program: /home/kpnc/gdb/gdb_demo

 

Breakpoint 1, 0x080483ef in main ()



Содержание раздела