|
Утилита gdb (сокр. от GNIJ Debugger) - это стандартный консольный отладчик в Linux и во многих других UNIX-системах. Существуют графические интерфейсы к gdb, например ODD, но они не являются стандартными средствами Linux и в мире UNIX популярностью не пользуются. Существует три класса объектов, называемые целями (target), которые программист может отлаживать в gdb: исполняемые файлы, дампы памяти (core-файлы) и процессы. В core-файле находится образ памяти процесса, образованный, как правило, в результате его аварийного завершения. Посмотрим, как каждую из целей можно загрузить в gdb для отладки. Для этого gdb предоставляет множество различных способов. Во-первых, любую цель можно загрузить из командной строки одновременно с запуском gdb. Далее перечислены основные способы. Способы загрузки исполняемою файла в gdb: # gdb имя программы # gdb -exec имя_программы # gdb -е имя_ программы Способы загрузки дампа памяти в gdb: # gdb -core имя_core # gdb -с имя_core # gdb имя_программы имя_ core В последнем варианте первым аргументом должно указываться имя программы, которая сгенерировала данный core -файл. Способы загрузки процесса в gdb: # gdb -с pid_npoцесса # gdb имя_процесса pid_пpoцесса PID любого процесса узнается с помощью команды ps. Любую из целей можно загрузить в уже запущенном отладчике gdb. Загружаем исполняемый файл: (gdb) file имя_программы (gdb) exec-file имя_программы Загружаем дамп памяти:
(gdb) core-file имя_ core Загружаем процесс: (gdb) attach pid_процесса Когда вы закончите отлаживать процесс, его можно выгрузить из gdb командой detach. Отсоединенный процесс продолжает выполнение в системе, а вы можете присоединить другой процесс. При запуске gdb выводит довольно внушительный объем данных о копирайте, подавить этот вывод можно, указав при запуске ключ -q. Для более удобной и эффективной отладки ваша программа должна быть откомпилирована с отладочной информацией. За это в gcc отвечает ключ -g. Отладочная информация позволит вам видеть в gdb имена переменных, функций, номера строк , как они были в исходном тексте вашей программы. Если отладочная информация недоступна, gdb будет отлаживать программу на уровне ассемблерных команд.
|