Отладка с помощью GDB

Отладчик GNU уровня исходного кода

Восьмая Редакция, для GDB версии 5.0

Март 2000

Ричард Столмен, Роланд Пеш, Стан Шебс и другие.


(1)

В Си++ и других объектно-ориентированных языках программирования, у вас может быть несколько функций с одним именем, но с аргументами разных типов. Например: int add_two(int a, int b); double add_two(double a, double b); double add_two(double a, int b);

Компилятор генерирует код для вызова верной функции по заданным аргументам. Это называется перегрузкой функций.

Однако, компоновщик требует, чтобы все символы имели недвусмысленные имена. Поэтому компилятор шифрует (от английского "mangle") имена перегруженных функций так, чтобы они включали типы аргументов и возвращаемые значения. К примеру, приведенные выше функции могут быть могут быть зашифрованы примерно так: add_two_Ret_int_int_int add_two_Ret_double_double_double add_two_Ret_double_double_int

(в действительности шифрованные имена выглядят безобразнее). В результате компоновщик может правильно обработать перегруженные функции. Дешифровщик (от английского "demangler")---это программа (или функция), которая выполняет обратную операцию: анализируя зашифрованные имена, она выдает исходную сигнатуру функции. Это необходимо, чтобы отобразить то, что программист сможет понять и связать с исходным текстом своей программы. Для этого любому средству отладки, поддерживающему Си++, обычно требуется дешифровщик. (Прим. переводчика)

(2)

m4: Конец ввода: 0: фатальная ошибка: EOF в строке (Прим. переводчика)

(3)

Программа завершилась нормально. (Прим. переводчика)

(4)

GDB, собранный со средствами DJGPP для MS-DOS/MS-Windows, поддерживает этот режим функционирования, но цикл событий приостанавливается, когда выполняется отлаживаемая программа.

(5)

Нить с идентификатором 1 неизвестна. Используйте команду "info threads", чтобы получить идентификаторы известных нитей. (Прим. переводчика)

(6)

Выражение не может быть реализовано с помощью точки наблюдения чтения/доступа. (Прим. переводчика)

(7)

Аппаратная точка наблюдения номер: Не удается поместить точку наблюдения (Прим. переводчика)

(8)

В текущем контексте нет символа "foo". (Прим. переводчика)

(9)

Не удается поместить точки останова. Эта программа может выполняться в другом процессе. (Прим. переводчика)

(10)

Остановлено; не удается поместить точки останова. Вы могли запросить слишком много аппаратно-поддерживаемых точек останова и наблюдения. (Прим. переводчика)

(11)

`b' не может быть использовано, потому что эти символы формата также используются с командой x, где `b' означает "byte"; смотрите section Исследование памяти.

(12)

На машинах, где стек растет вниз в памяти (в наши дни, на большинстве машин), это способ удалить одно слово из стека. Это подразумевает, что выбран самый внутренний кадр; когда выбраны другие кадры стека, установка $sp не разрешена. Используйте return для извлечения целого кадра из стека, вне зависимости от архитектуры машины; смотрите section Возврат из функции.

(13)

Если, например, вызов процедуры используется в выражении, то эта процедура вызывается со всеми своими побочными эффектами. При неаккуратном использовании это может привести к путанице.

(14)

от `Binary File Descriptor' (библиотека описания двоичных файлов). (Прим. переводчика)

(15)

Если вы выберете номер порта, который конфликтует с другим сервисом, gdbserver печатает сообщение об ошибке и завершает работу.

(16)

Универсальный отладочный интерфейс. (Прим. переводчика)

(17)

виртуальный адрес памяти (Прим. переводчика)

(18)

В системах DOS/Windows, домашним каталогом считается тот, который указывает переменная среды HOME.

(19)

В `gdb-5.0/gdb/refcard.ps' в версии 5.0 выпуска.

(20)

Если у вас более новая версия GDB, чем 5.0, просмотрите файл `README' в исходном каталоге; мы могли усовершенствовать процедуру установки с момента публикации этого руководства.


This document was generated on 1 November 2000 using texi2html 1.56k.