Отладка программ 
  Программа для отладчика --- это последовательность занумерованных строк-команд.
  Основные этапы отладки:
  1) тестирование -- поиск изъянов и ошибок;
  2) стабилизация -- обеспечение повторяемости ошибок;
  3) локализация -- определение строки программы с ошибкой;
  4) корректировка -- исправление ошибки;
  5) проверка -- подтверждение того, что исправление работает.
  Основные средства отладки:
  1) старт программы --- опционально с параметрами;
  2) вставка/удаление точек останова (breakpoints). Точки останова делятся на 
простые и условные, программные и аппаратные, а также на постоянные 
и однократные. В условных точках останов происходит только если заданное 
условие истинно, в простых --- всегда. Программные точки останова реализуются 
заменой соответствующей позиции точки (команды машинного кода) на однобайтную 
команду вызова прерывавния (для i8086 и совместимых - INT 3). Отладчик 
перехватывает такие вызовы, по стеку определяет позицию точки, вычисляет
условие (если оно есть) и организует при необходимости останов выполнения
программы. Аппаратные точки останова реализуются средствами процессора.
Совместимые с Intel 80386 поддерживают до 4-х таких точек, которые задаются
адресами. Аппаратные точки можно использовать для отладки программ в памяти
только для чтения, ПЗУ (ROM), а также для организации простых выражений
останова. Однократная точка после первого останова в ней автоматически
снимается. Точки останова не замедляют исполнения программы;
  3) исполнение до позиции курсора --- однократная точка останова вставляется 
по указанной позиции;
  4) выражения останова (watchpoints) --- выражения, вычисляемые после 
выполнения каждой строки программы. Если значение одного из выражений изменяется, 
то программа остановливается. Замедляют до 100 и более раз скорость исполнения 
программы, если не использовать аппаратные точки останова; 
  5) возобновление исполнения после останова;
  6) трассировка (trace) --- исполнение текущей строки и останов. Следующая 
строка выбирается по трассе исполнения программы, в частности, с заходом в 
подпрограммы, для которых есть отладочная информация. Может быть реализована
аппаратно; 
  7) построчное исполнение (stepping) --- исполнение текущей строки и останов. 
Не заходит в подпрограммы;  
  8) анализ стека --- можно исследовать порядок вызова подпрограмм и их 
стековые кадры; 
  9) выход из подпрограммы --- установка однократной точки останова на команде, 
следующей за той, что вызвала подпрограмму, и возобновление исполнения; 
  10) постоянный вывод текущих значений объектов, установка наблюдаемых величин 
(watches). Вывод значений таких величин производится после каждого останова;
  11) вывод текущих значений объектов по специальной команде;  
  12) изменение текущих значений объектов --- можно менять значения переменных 
и других объектов во время останова;
  13) дизассемблирование команды --- показ соответствующего кода ассембера для 
выбранных строк;
  14) распечатка содержимого памяти (dump);
  15) установка точек трассировки (tracepoints) --- при достижении этих точек 
отладчиком производятся заданные действия без останова исполнения программы. 
Позволяет, в частности, создавать отчет о ходе выполнения программы;
  16) показ текста исходников;
  17) информация по объектам отладки;
  18) удаление объектов отладки;
  19) вывод информации по командам.
  Основной отладчик в среде Linux --- это консольная программа GDB. Существуют 
более десятка графических интерфейсов к ней. Для отладки с GDB или аналогичным
по назначению средством, программа должна компилироваться и компоноваться 
специальным образом. В коде для отладки должна сохраняться информация о 
номерах строк и именах программных объектов. GDB плохо приспособлен для отладки
программ без символьной информации, поэтому в таких случаях предпочтительнее 
использовать другие средства, например, IDA, FDBG, EDB, RASM, ...
  Подготовка кода для GDB: g++ -g (Си++), gcc -g (Си) --- соответствующие 
возможности есть и у других компиляторов. Для отладчиков, отличных от 
GDB, а также при необходимости включения дополнительной информации в 
генерируемый код можно использовать дополнительные опции компилятора и 
компоновщика.
  При подготовке кода для отладчика следует отключать оптимизацию, которая 
может приводить к генерации кода, рассинхронизованного с исходниками: могут быть 
отброшены переменные, циклы и т.п. 
  Типичные команды программы gdb: break (b, 2), watch (4), run (r, 1), continue (c, 5), 
step (s, 6), next (n, 7), backtrace (bt, 8), finish(fin, 9), display (10), print (p, 11), 
set (12), disassemble (13, синтаксис AT&T), x (14, examine memory), list (l, 16), 
info (i, 17), delete (d, 18), help (h, 19). 
  Пример.
     g++ -g -o helloworld helloworld.cpp
     gdb helloworld
       l          list
       b 4        set breakpoint at line 4
       i b        show breakpoints, they are numbered from 1
       r          run
       s          step
       d br 1      delete breakpoint 1
       q          quit, можно вместо этого нажать ^D

Отладкой можно заниматься удалённо, с другого компьютера.

К отладке можно отнести и профилирование --- анализ времени выполнения подпрограмм в 
программе. Для получения данных для профилировщика нужно компилировать программу 
(gcc, g++, ...) с ключом -p. После окончания выполнения подготовленного таким образом 
кода создается специальный файл-отчет, который можно изучать, используя программу 
prof (gprof).