Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
debug_dummy(); /* ...оставшаяся часть кода... */}Теперь из GDB установите контрольную точку в
debug_dummy()(gdb) <b>break debug_dummy</b> /* Установить контрольную точку для фиктивной функции */Breakpoint 1 at 0x8055885: file whizprog.c, line 3137.(gdb) <b>run</b> /* Запуск программы */По достижении контрольной точки для
debug_dummy()check_salary()(gdb) <b>run</b> /* Запуск программы */Starting program: /home/arnold/whizprogBreakpoint 1, debug_dummy() at whizprog.c, line 31373137 void debug_dummy(void) { return; } /* Достижение контрольной точки */(gdb) <b>break check_salary</b> /* Установить контрольную точку для интересующей функции */Breakpoint 2 at 0x8057913: file whizprog.c, line 3140.(gdb) <b>cont</b>По достижении второй контрольной точки программа готова завершиться неудачей, и вы можете пошагово ее пройти, делая все необходимое для отслеживания проблемы.
Вместо использования фиксированной константы ('
++count == 1426Для
gawkawkstopme()stopme()awkgawkawkawkNR == 1198 { stopme() } # Остановиться для отладки, когда число записей == 1198/* ...оставшаяся часть программы как ранее... */Затем из GDB мы можем установить контрольную точку на функции С
stopme()awkgawkМетодика функции-ловушки полезна сама по себе. Однако, возможность переместить ее на уровень приложения умножает ее полезность, и она сохранила нам бесчисленное число часов отладки при отслеживании непонятных проблем.
15.5. Отладочные инструменты
Помимо GDB и различных ловушек в исходном коде, которые вы используете для общей отладки, имеется ряд полезных пакетов, которые могут помочь обнаружить определенные разновидности проблем. Поскольку управление динамической памятью является в крупномасштабных программах такой трудной задачей, многие инструменты фокусируются на этой области, часто действуя в качестве замещающих
malloc()free()Имеются коммерческие инструменты, которые делают множество (или все) из тех вещей, что и описываемые нами программы, но не все они доступны для GNU/Linux, а многие довольно дороги. Все пакеты, обсуждающиеся в данном разделе, являются свободно доступными.
15.5.1. Библиотека
dbugprintf()Первым пакетом, который мы исследуем, является библиотека
dbugБиблиотека
dbugdbugdbugПакет
dbugСледующий список является кратким изложением возможностей пакета
dbug• Трассировка исполнения, отображающая уровень потока управления полуграфическим способом с использованием отступов, обозначающих глубину вложения
• Вывод значений всех или любого набора ключевых внутренних переменных.
• Ограничение действий определенным набором указанных функций.
• Ограничение трассировки функций указанной глубиной вложения.
• Пометку каждой выводимой строки названием исходного файла и номером строки.
• Пометку каждой выводимой строки названием текущего процесса.
• Сохранение в стеке или восстановление состояния отладки для обеспечения исполнения со встроенными значениями по умолчанию для отладки.
• Перенаправление потока вывода отладки в стандартный вывод (
stdoutstderr