Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
По нашему опыту, если нужно использовать отладчик, лучше перекомпилировать приложение с самого начала, использовав лишь опцию
-gЕсть одно предостережение: убедитесь, что поведение программы все еще неправильное. Воспроизводимость является ключевой при отладке; если вы не можете воспроизвести проблему, гораздо труднее ее выследить и исправить. В редких случаях компиляция без опции
-O-O15.3. Основы GDB
Отладчик является программой, позволяющей контролировать исполнение другой программы и исследовать и изменять состояние подчиненной программы (такое, как значения переменных). Имеются два вида отладчиков: отладчики машинного уровня, работающие на уровне машинных инструкций, и отладчики исходного кода, работающие на основе исходного кода программы. Например, в отладчике машинного уровня для изменения значения переменной вы указываете адрес в памяти. В отладчике исходного уровня вы просто используете имя переменной.
Исторически в V7 Unix был
adbsdbadbdbxGDB, отладчик GNU, является отладчиком исходного кода. У него значительно больше возможностей, он значительно более переносим и более практичен, чем любой из
sdbdbxКак и его предшественники, GDB является отладчиком командной строки. Он выводит по одной строке исходного кода за раз, выдает приглашение и читает одну строку ввода, содержащего команду для исполнения.
Имеются графические отладчики; они предоставляют больший обзор исходного кода и обычно предоставляют возможность манипулировать программой как из окна командной строки, так и через компоненты GUI, такие, как кнопки и меню. Отладчик
dddddddddGDB понимает С и С++, включая поддержку восстановления имен (name demangling), что означает, что вы можете использовать для функций-членов классов и перегруженных функций обычные имена исходного кода С++. В частности, GDB распознает синтаксис выражений С, что полезно при проверке значения сложных выражений, таких, как '
*ptr->x.a[1]->qЕсли вы работаете на системе GNU/Linux или BSD (и установили средства разработки), у вас, вероятно, уже установлена готовая к использованию последняя версия GDB. Если нет, исходный код GDB можно загрузить с FTP-сайта проекта GNU для GDB [165] и самостоятельно его построить.
GDB поставляется с собственным руководством, которое занимает 300 страниц. В каталоге исходного кода GDB можно сгенерировать печатную версию руководства и самостоятельно его распечатать. Можно также купить в Free Software Foundation (FSF) готовые печатные экземпляры; ваша покупка поможет FSF и непосредственно внесет вклад в производство большего количества свободного программного обеспечения. (Информацию для заказа см. на веб-сайте FSF) [166]. Данный раздел описывает лишь основы GDB; мы рекомендуем прочесть руководство, чтобы научиться использовать все преимущества возможностей GDB.
15.3.1. Запуск GDB
Основное использование следующее:
gdb [<i>опции</i>][<i>исполняемый файл</i> [<i>имя файла дампа</i>]]Здесь исполняемый файл является отлаживаемой программой. Имя файла дампа, если оно имеется, является именем файла
corecore.<i>pid</i><i>pid</i><i>pid</i>Если вы забыли указать в командной строке имена файлов, для сообщения GDB имени исполняемого файла можно использовать '
file <i>исполняемый-файл</i>core-file <i>имя-файла-дампа</i>При наличии дампа ядра GDB указывает место завершения программы. Следующая программа,
ch15-abort.cabort()/* ch15-abort.c --- создает дамп ядра */#include <stdio.h>#include <stdlib.h>/* recurse --- создание нескольких вызовов функций */void recurse(void){ static int i; if (++i == 3) abort(); else recurse();}int main(int argc, char **argv){