gdb

компилируем командой:

 $> 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