Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

232m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

Трассировщик системных вызовов

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 9. Поиск ошибокClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Средства трассировки системных вызовов, например strace в Linux, по% казывают все системные вызовы, выполняемые приложением. Это хо% роший способ узнать, как программа взаимодействует со своим окруже% нием. Он особенно полезен, если возникает подозрение, что она застре% вает в ожидании какой%то внешней активности, которой не происходит.

Дамп памяти

Этот термин (core dump) применяется в UNIX для обозначения генери% руемого ОС мгновенного снимка программы в момент ее аварийного завершения. Термин происходит от древних машин с памятью на фер# ритовых сердечниках (ferrite core); файл дампа до сих пор называется core. Он содержит копию памяти программы в момент ее гибели, со% стояние регистров ЦП и стек вызовов функций. Дамп памяти можно загрузить в анализатор (часто им оказывается отладчик) и получить большой объем полезной информации.

Журналирование

Средства журналирования позволяют программным образом генери% ровать информацию о программе во время ее выполнения. Некоторые системы журналирования позволяют назначать для выводимых дан% ных приоритеты (например, отладочные, предупредительные, неуст% ранимые) и производить при работе программы фильтрацию выводи% мых сообщений в соответствии с выбранным уровнем. Журнал работы программы содержит историю ее работы, по которой можно выяснить обстоятельства, приведшие к сбою.

Не прибегая к специальным средствам журналирования (входящим в операционную среду или полученным из библиотек сторонних разра% ботчиков), можно достичь того же результата, оснастив свой код соот% ветствующими операторами вывода в интересующих вас точках. Од% нако их вывод может перемежаться с обычной выдачей программы, и их нужно тщательно удалить при выпуске окончательной версии.

Иногда оказывается невозможным разместить даже самые скромные команды вывода. Однажды при запуске нового образца аппаратуры у меня не оказалось иных средств диагностики, кроме одного 8%сег% ментного индикатора на светодиодах и осциллографа, подключенного к свободной системной шине. Просто удивительно, как много инфор% мации можно при желании запихнуть в несколько лампочек!

Журналирование имеет свои недостатки: оно может замедлить выпол% нение программы, увеличить ее размер и даже привнести в программу ошибки. Некоторые системы журналирования, в которых при аварии уничтожается буфер с диагностическими сообщениями, бесполезны для выяснения причин аварийного завершения программы. Разбери% тесь в работе своего механизма журналирования и всегда направляйте сообщения диагностики в небуферизованный поток вывода.