Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
105.47 Кб
Скачать

5. Отладчик gdb

GDB предоставляет все перечисленные возможности. Он называется отладчиком на уровне исходного текста, создавая иллюзию, что Вы выполняете операторы C++ из Вашей программы, а не машинный код, в который они действительно транслируются.

Для иллюстрации мы используем систему, которая компилирует программы на C++ в исполняемые файлы, содержащие машинный код. В результате этого процесса информация об оригинальном коде C++ теряется при трансляции. Отдельный оператор C++ обычно преобразуется в несколько машинных команд, а большинство имен локальных переменных просто теряется. Информация о именах переменных и операторах C++ в Вашей исходной программе не является необходимой для ее выполнения. Поэтому, для правильной работы отладчика на уровне исходного текста, компилятор должен поместить в программу некоторую дополнительную информацию. Обычно ее добавляют к информации, используемой компоновщиком, в исполняемый файл.

Чтобы указать компилятору (gcc), что Вы планируете отлаживать Вашу программу, и поэтому нуждаетесь в дополнительной информации, добавьте ключ -g в опции компиляции и компоновки. Например, если Ваша программа состоит из двух файлов main.C и utils.C, Вы можете откомпилировать ее командами

gcc -c -g -Wall main.C

gcc -c -g -Wall utils.C

gcc -g -o myprog main.ob utils.o

6. Команда nm

Команда nm выдает на стандартный вывод таблицу имен для каждого объектного файла, указанного в командной строке. Файл может быть как перемещаемым, так и абсолютным объектным файлом, или может быть архивом из таких файлов. Для каждого элемента таблицы выдается следующая информация:

Name

Имя элемента таблицы.

Value

Значение, выражаемое как смещение или адрес, в зависимости от класса хранения.

Class

Класс хранения.

Type

Информация о типе. Если элемент описывает экземпляр структуры или об единения, то за типом будет выведено имя структуры или об единения (например, struct-имя). Если элемент соответствует массиву, то размер массива будет указан за типом (например, char[n][m]). Заметим, что для наличия этой информации файл должен быть откомпилирован командой cc(1)с опцией -g.

Size

Размер в байтах, если он определен. Заметим, что для наличия этой информации файл должен быть откомпилирован командой cc(1)с опцией -g.

Line

Номер строки в файле с исходным текстом, в которой об ект определяется, если эта информация имеет смысл. Заметим, что для наличия этой информации файл должен быть откомпилирован командой cc(1)с опцией -g.

Section

Для об ектов с классом хранения статический (static) и внешний (extern) указывается секция, которой принадлежит об ект: секция команд (.text), секция инициализированных данных (.data) или секция неинициализированных данных (.bss).

Для нашего случая используем nm myprog

7. Утилита objdump

1) Для любой функции программы получить с помощью утилиты objdump ее бинарный и ассемблерный код с соответствующими сороками на С

objdump –d os2.o

2) С помощью утилиты objdump, определить в какой секции хранятся символьные строки, и в какой исполняемый код программы

objdump –h myprog

Соседние файлы в папке Лабораторная работа №23