Ответ
Оба инструмента используются в отладчиках, но отслеживают разные события в программе.
-
Breakpoint (Точка останова): Останавливает выполнение программы при достижении определенной строки кода (инструкции). Используется для анализа состояния программы (значений переменных, стека вызовов) в конкретный момент.
-
Watchpoint (Точка наблюдения, или Break on Write): Останавливает выполнение программы при изменении значения конкретной переменной или области памяти. Незаменим для отслеживания места, где переменная неожиданно меняется.
Пример отладки на C с использованием GDB:
#include <stdio.h>
int main() {
int important_value = 0; // За этой переменной установим watchpoint
int counter = 0;
for (counter = 0; counter < 5; counter++) {
// Обычный breakpoint здесь остановит цикл на каждой итерации
important_value = calculate(counter); // Watchpoint сработает ЗДЕСЬ, когда important_value изменится
printf("Iteration %dn", counter);
}
return 0;
}
Команды GDB:
# Установка обычной точки останова на строку 10
(gdb) break 10
# Установка watchpoint на переменную important_value
(gdb) watch important_value
# Или для более эффективного отслеживания только записи:
(gdb) watch -l important_value
# Запуск программы
(gdb) run
# Выполнение остановится, когда important_value будет изменена в первый раз.
Почему это важно: Breakpoints отвечают на вопрос "где остановиться?", а Watchpoints — на вопрос "когда и где изменилась эта переменная?", что критически важно для поиска сложных ошибок, связанных с порчей данных.