Краткое описание отладчика GDB

Основные возможности отладчика GDB (GNU Debugger): Отладчик GDB является свободно распространяемым ПО организации GNU. Интерфейс с пользователем организован "через командную строку", но имеется развитая свободно распространяемая графическая оболочка DDD (Data Display Debugger).
Ниже дается краткое описание наиболее часто ислользуемых команд отладчика GDB.

Компиляция программы

gcc -g -o prog prog.c

Запуск отладчика

gdb prog gdb prog core gdb prog pid gdb -h

 Команды отладчика

Выполнение программы
set environment varname value show environment varname unset environment varname set args [arg1 ...] show args run (или r)

 Доступ к исходному тексту

list (или l) funcname list (или l) linenum list (или l) list (или l) - show listsize set listsize n

Доступ к машинному коду

disassemble disassemble funcname disassemble address disassemble s_addr end_addr info line linenum info line *address  

Точки останова (breakpoints)

break funcname break linenum break +offset
break -offset break *address whatch expr condition bn lexpr commands bn info break [bn] disable [bn] enable [bn] delete [bn]

Продолжение после останова

continue (или c) step (или s) step (или s) n next (или n) [n] finish stepi (или si) [n] nexti (или ni) [n]

Доступ к стеку вызова функций

backtrace (или bt)

Доступ к переменным программы

print (или p) expr print/f expr print/f Выражение expr помимо конструкций языка СИ/СИ++ может включать в себя:
{type}addr funcname::static-var

Доступ к памяти

x [/[n][f][u]] addr
выдать содержимое памяти программы по адресу addr, используя следующие спецификации вывода:

Доступ к регистрам

info registers info all-registers info registers regname1 [regname2 ... ] Примечание. Имена регистров определяются используемым ассемблером эксплуатируемой машины. В GDB принято имена регистров предварять символом "$" (например, в GDB $esp означает регистр указателя стека %esp ассемблера фирмы Sun Microsystems для микропроцессора серии X86* фирмы Intel).
Примечание. Конструкция $regname в командах GDB (кроме команды set) трактуется как "содержимое регистра regname", например:
x/xw $ebp+8 x/s *(char *)($esp+4)

Изменения в программе

set var varname = expr set $regname = expr set {type}addr = expr

Прочие полезные команды

file prog
exec-file prog source filename info variables