компилируем командой:
$> gcc -gstabs myprog.c -o myprog.o
-g флаг отладки
“stabs” формат используемый GDB
собираем исполняемый файл командой:
$> ld -o myprog myprog.o
запускаем отладчик командой:
$> gdb ./myprog
q - quit
l - вывод листинга
i register - отобразить регистры
r - выполнить программу
r arg1 arg2 - запустить программу с аргументами командной строки args arg1, arg2
set args arg1 arg2 - установить аргументы командной строки arg1, arg2
show args - показать текущие аргументы командной строки
s - выполнить одну инструкцию “step into”
n - “step over” (не входить в тела функций)
c - продолжить исполнение
k - завершить исполнение
fin - “step out” (идет в точку после вызова данной функции
disp $eax - отобразить регистр EAX
p/f $reg - показать содержимое регистра по формату f: t(bin), x(hex), u(udecimal), o(oct), a(address), c(char), f(float)
p/h $eax - отобразить в шестнадцатеричной
p/d $eax - отобразить в десятичной
p/t $eax - отобразить в двоичной
wa $eax - отобразить лишь при изменении
i wat - показать список вотчей
i b - показать список бряков
b - установка бряков
b linenum - поставить бряк на строке листинга с номером
b *addr - поставить бряк на адресе в памяти
b fan - поставить бряк на входе функции fan
condition bpnum expr - условный бряк (if expression expr is non-zero)
d b1 b2 - удалить бряки b1, b2 (или все - если нет спецификации)
clear *addr - очистить бряк на памяти
clear fn - очистить бряк на функции fn (или - текущей, если нет спецификации)
clear linenum - очистить бряк на строке листинга
disable b1 b2 - блокировать бряки b1, b2 (или все - если нет спецификации)
enable b1 b2 - разблокировать бряки b1, b2 (или все - если нет спецификации)
x/rsf addr - показать содержимое памяти ; repeat count r, size s, format f
size is b (byte), h (halfword), w (word), g (double word)
format is the same as for print, with the additions of s (string) and i (instruction)
i disp - показать список выражений для просмотра
display/f $reg - показать регистр при каждом бряке : format f
display/si addr - показать память при каждом бряке размера i
display/sn addr - показать память как строку размера n
undisplay num - удалить из списка дисплеев
where - показать стек вызовов
backtrace - показать стек вызовов
frame - показать текущий фрейм стека
up - move the context toward the bottom of the call stack
down - move the context toward the top of the call stack
(gdb) b main set output-radix 16 set output-radix 10 set disassembly intel set language asm disassemble
---
список бряков: info b
список вотчей: info wa