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

       

Точки останова


Отладчик gdb

поддерживает два типа точек останова: останов по выполнению кодаbreakpoint, и останов по обращению к данным (так же называемый точками наблюдения) — watch-point. (Еще gdb

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

Точки останова могут быть как программными, так и аппаратными. Программная точка останова по выполнению на x86-платформе представляет собой однобайтовую инструкцию CCh (INT 03h), а программный watch-point реализуется путем пошаговой трассировки программы с отслеживанием обращений к подопытной ячейке, что, во-первых, крайне непроизводительно, а, во-вторых, некоторые программы просто не позволяют себя трассировать. Аппаратных точек останова на x86 всего четыре, программных же можно устанавливать сколько угодно.

Программная точка останова по исполнению задается командой "break" ("b") за которой следует имя функции/адрес/регистр или переменная. Например, "b main", "*0x80484BC". Команда "tbreak" ("tb") устанавливает одноразовую точку останова, которая автоматически удаляется при срабатывании. Аппаратная точка останова задается командой "hbreak" ("hb"), а временная аппаратная точка — "thbreak" ("thb"). После установки аппаратной точки останова отладит сообщает "Hardware assisted breakpoint N at адрес", однако, это еще не значит, что операция завершилась успешно. Для проверки можно установить хоть тысячу аппаратных точек останова и все будет ОК, но вот только при запуске программы командами "run" или "continue" отладчик может сообщить: "Warning: Cannot insert hardware breakpoint N".

 



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