Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

1

?func?: args: argv[3] = 2

factorial: find: find 2 factorial

factorial: find: find 1 factorial

factorial: result: result is 1

factorial: result: result is 2

2

Опция

– #
управляет библиотекой
dbug
. Она «особая» в том смысле, что
DBUG_PUSH
будет принимать всю строку, игнорируя ведущие символы '
– #
',
хотя вы могли бы использовать при желании другую опцию, передав
DBUG_PUSH
лишь строку аргументов опций (если вы используете
getopt
, это
optarg
).

Управляющая строка состоит из набора опций и аргументов. Каждая группа опций и аргументов отделяется от других символом двоеточия. Каждая опция представлена одной буквой, а аргументы этой опции отделяются от нее запятыми. Например:

$ myprog -#d,mem,ipc:f,check_salary,check_start_date -f infile -o outfile

Опция

d
включает вывод
DBUG_PRINT
, но лишь если первая строка аргумента является "
mem
" или "
ipc
". (Если аргументов нет, выводятся все сообщения
DBUG_PRINT
.) Сходным образом опция
f
ограничивает трассировку вызовов функций лишь указанными функциями,
check_salary
и
check_start_date
.

Следующий список опций и аргументов воспроизведен из руководства библиотеки

dbug
. Квадратные скобки заключают необязательные аргументы. Мы включаем здесь лишь те, которые находим полезными; полный список см. в документации.

d [,ключевые слова]

Разрешает вывод от макросов с указанными ключевыми словами. Пустой список ключевых слов предполагает, что выбраны все ключевые слова.

F

Помечает каждую строку вывода отладки именем исходного файла, содержащего макрос, осуществляющий вывод.

i

Идентифицирует процесс, выводящий каждую отладочную или трассировочную строку номером ID для этого процесса.

L

Помечает каждую строку вывода отладчика номером строки исходного файла, в котором находится осуществляющий вывод макрос.

о[,файл]

Перенаправляет поток вывода отладчика в указанный файл. Потоком вывода по умолчанию является

stderr
. Пустой список аргументов перенаправляет вывод в
stdout
.

t[,N]

Включает трассировку потока управления функций. Максимальная глубина вложения определяется

N
, по умолчанию используется 200.

Для завершения нашего обсуждения вот остальные макросы, определенные библиотекой

dbug
.

DBUG_EXECUTE(строка, код)

Этот макрос похож на

DBUG_PRINT
: первый аргумент является строкой, выбранной с помощью опции
d
, а второй — код для исполнения:

DBUG_EXECUTE("abort", abort);

DBUG_FILE

Это значение типа

FILE*
для использования с процедурами
<stdio.h>
.
Оно позволяет осуществлять собственный вывод в поток файла отладки.

DBUG_LONGJMP(jmp_buf env, int val)

Этот макрос заключает в оболочку вызов

longjmp
, принимая те же самые аргументы, так что библиотека
dbug
будет знать, когда вы сделали нелокальный переход.

DBUG_POP

Этот макрос выталкивает из стека один уровень сохраненного состояния отладки, созданный макросом

DBUG_PUSH
. Он довольно эзотерический; вы скорее всего не будете его использовать.

DBUG_SETJMP(jmp_buf env)

Этот макрос заключает в оболочку вызов

setjmp
, принимая те же самые аргументы. Он позволяет библиотеке
dbug
обрабатывать нелокальные переходы.

В другом воплощении, в первой начинающей компании, для которой мы работали [177] , мы использовали в своем продукте библиотеку

dbug
. Она была неоценимой при разработке, а опустив
– DDBUG
в конечной сборке, мы смогли построить готовую версию без других изменений исходного кода.

177

Хотя нам следовало бы усвоить свой урок после первой компании, мы перешли ко второй. С тех пор, как мы это выяснили, мы обычно избегаем начинающие компании. Ваша выгода, конечно, может меняться — Примеч. автора.

Чтобы извлечь максимальную выгоду от библиотеки

dbug
, нужно использовать ее последовательно, по всей программе. Это проще, если вы используете ее с начала проекта, но в качестве эксперимента мы обнаружили, что с помощью простого сценария
awk
мы смогли включить библиотеку в программу с 30 000 строк кода за несколько часов работы. Если вы можете позволить себе накладные расходы, лучше всего оставить ее в конечной сборке вашей программы, чтобы можно было ее отлаживать без необходимости предварительной перекомпиляции.

Мы нашли, что библиотека

dbug
является удачным дополнением к внешним отладчикам, таким, как GDB; она обеспечивает организованный и последовательный способ применения поддержки к коду С. Она также довольно элегантно сочетает многие из методик, которые мы ранее в данной главе очертили отдельно. Особенно полезна особенность динамической трассировки вызовов функций, и она доказывает свою бесценность в качестве помощи в изучении поведения программы, если вы незнакомы с ней.

15.5.2. Отладчики выделения памяти

Игнорируя такие проблемы, как плохой дизайн программы, для любого крупномасштабного практического приложения единственной сложной задачей программиста на С является управление динамической памятью (посредством

malloc
,
realloc
и
free
).

Этот факт подкреплен большим количеством инструментов, доступных для отладки динамической памяти. Имеется значительное перекрывание того, что предлагают данные утилиты. Например:

Поделиться:
Популярные книги

Я - истребитель

Поселягин Владимир Геннадьевич
1. Я - истребитель
Фантастика:
альтернативная история
8.19
рейтинг книги
Я - истребитель

Законы Рода. Том 10

Мельник Андрей
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Последний Паладин. Том 13

Саваровский Роман
13. Путь Паладина
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 13

Воплощение Похоти

Некрасов Игорь
1. Воплощение Похоти
Фантастика:
юмористическое фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Воплощение Похоти

Революция

Валериев Игорь
9. Ермак
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Революция

Курсант: назад в СССР 2

Дамиров Рафаэль
2. Курсант
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Курсант: назад в СССР 2

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Программирование на языке Ruby

Фултон Хэл
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
Программирование на языке Ruby

Матабар VIII

Клеванский Кирилл Сергеевич
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Матабар VIII

Медиум

Злобин Михаил
1. О чем молчат могилы
Фантастика:
фэнтези
7.90
рейтинг книги
Медиум

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4