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

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

Жанры

Основы программирования в Linux
Шрифт:

Отладчик gdb можно также применять для отладки аварийно завершившихся программ. Системы Linux и UNIX при аварийном завершении программы часто создают дамп ядра в файле с именем core. Это отображение карты памяти программы, которое содержит значения глобальных переменных в момент возникновения сбоя. Вы сможете использовать gdb для того, чтобы определить место в программе, вызвавшее аварийное завершение. Дополнительную информацию см. в интерактивном справочном руководстве к gdb.

Отладчик gdb доступен в соответствии с требованиями Общедоступной лицензии проекта GNU и его поддерживает большинство систем UNIX. Мы настоятельно рекомендуем

вам, как следует изучить его.

Дополнительные средства отладки

Помимо полнофункциональных отладчиков, таких как gdb, Linux-системы обычно предоставляют и другие средства, которые можно применять для поддержки процесса отладки. Некоторые из них снабжают статической информацией о программе, другие обеспечивают динамический анализ.

Статический анализ предоставляет сведения только об исходном тексте программы. Программы ctags, cxref и cflow работают с исходными файлами и предлагают полезные данные о вызовах функций и их месте в программе.

Динамический анализ предоставляет информацию о том, как программа ведёт себя во время выполнения. Программы prof и gprof предлагают сведения о том, какие функции были выполнены, и сколько времени заняло их выполнение,

Давайте рассмотрим некоторые из этих средств и их вывод. Не все они будут доступны во всех системах, хотя у многих из этих средств есть свободно распространяемые версии.

Lint удаление ошибок из ваших программ

Первые системы UNIX предоставляли утилиту

lint
. Эта программа по существу — препроцессор компилятора С со вставленными тестами, обеспечивающими некоторые проверки с точки зрения здравого смысла и вывод предупреждений. Среди прочего она обнаруживает случаи применения переменных до того, как им было присвоено значение, или случаи неиспользования аргументов функций.

Более современные компиляторы C могут ценой производительности времени компиляции формировать аналогичные предупреждения. Утилиту

lint
, как таковую, обогнала стандартизация языка С. Поскольку средство основывалось на раннем компиляторе С, оно совсем не справляется с синтаксисом ANSI. Есть несколько коммерческих версий
lint
для UNIX и одна версия в Интернете для Linux, названная
splint
. Она известна под именем LClint, как часть проекта MIT (Massachusetts Institute of Technology, Массачусетский технологический институт), занимающегося разработкой средств формального описания.
splint
, средство подобное
lint
, может предоставлять полезные обзорные комментарии к программному коду. Найти
splint
можно по адресу http://www.splint.org.

Далее приведена первоначальная версия (debug0.c) программы-примера, которую вы уже отладили.

/* 1 */ typedef struct {

/* 2 */ char *data;

/* 3 */ int key;

/* 4 */ } item;

/* 5 */

/* 6 */ item array[j] = {

/* 7 */ {"bill", 3},

/* 8 */ {"neil", 4},

/* 9 */ {"john", 2},

/* 10 */ {"rick", 5},

/* 11 */ {"alex", 1},

/* 12 */ };

/* 13 */

/* 14 */ sort(a, n)

/* 15 */ item *a;

/* 16 */ {

/* 17 */ int i = 0, j = 0;

/* 18 */ int s;

/* 19 */

/* 20 */ for(; i < n & s != 0; i++) {

/* 21 */ s = 0;

/* 22 */ for(j = 0; j < n; j++) {

/* 23 */ if(a[j].key > a[j+1].key) {

/* 24 */ item t = a[j];

/* 25 */ a[j] = a[j+1];

/* 26 */ a[j+1] = t;

/* 27 */ s++;

/* 28 */ }

/* 29 */ }

/* 30 */ n--;

/* 31 */ }

/* 32 */ }

/* 33 */

/* 34 */ main

/* 35 */ {

/* 36 */ sort(array,5);

/* 37 */ }

В

этой версии есть проблема в строке 20, где вместо предполагаемого оператора
&&
применяется оператор
&
. Далее приведен отредактированный пример вывода
splint
, выполненной с этой версией программы. Обратите внимание на то, как она обнаруживает проблемы в строке 20 — тот факт, что вы не инициализировали переменную
s
и что возможны проблемы с условием из-за некорректного оператора.

neil@susel03:~/BLP4e/chapter10> splint -strict debug0.c

Splint 3.1.1 --- 19 Mar 2005

debug0.c:7:18: Read-only string literal storage used as initial value for

unqualified storage: array[0].data = "bill"

A read-only string literal is assigned to a non-observer reference. (Use -readonlytrans to inhibit warning)

debug0.c:8:18: Read-only string literal storage used as initial value for

unqualified storage: array[1].data = "neil"

debug0.c:9:18: Read-only string literal storage used as initial value for

unqualified storage: array[2].data = "john"

debug0.с:10:18: Read-only string literal storage used as initial value for

unqualified storage: array[3].data = "rick"

debug0.c:11:18: Read-only string literal storage used as initial value for

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

Кодекс Магических Зверей. Гепталогия

Сорокин Александр Сергеевич
Кодекс Магических Зверей
Фантастика:
городское фэнтези
рпг
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Магических Зверей. Гепталогия

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю
Компьютеры и Интернет:
программирование
5.00
рейтинг книги
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Жрец Хаоса. Книга II

Борзых М.
2. Зов пустоты
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Жрец Хаоса. Книга II

Шайтан Иван

Тен Эдуард
1. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.50
рейтинг книги
Шайтан Иван

Величайшее тайдзюцу

Desmondd
Проза:
современная проза
5.00
рейтинг книги
Величайшее тайдзюцу

Воины Пустошей Хаоса (сборник)

Вернер К. Л.
Warhammer Chronicles
Фантастика:
эпическая фантастика
боевая фантастика
5.00
рейтинг книги
Воины Пустошей Хаоса (сборник)

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Распутин

Наживин Иван Федорович
Проза:
историческая проза
5.00
рейтинг книги
Распутин

Миллион приключений (сборник)

Булычев Кир
15. Отцы-основатели - Русское пространство. Кир Булычев - Собрание сочинений
Фантастика:
научная фантастика
7.00
рейтинг книги
Миллион приключений (сборник)

Сотворение мира.Книга вторая

Закруткин Виталий Александрович
2. Избранное в трех томах
Проза:
советская классическая проза
семейный роман
5.75
рейтинг книги
Сотворение мира.Книга вторая

Гулящие люди

Чапыгин Алексей Павлович
Проза:
историческая проза
6.25
рейтинг книги
Гулящие люди

Низший - Инфериор. Компиляция. Книги 1-19

Михайлов Дем Алексеевич
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
5.00
рейтинг книги
Низший - Инфериор. Компиляция. Книги 1-19

Хроники Корума (сборник)

Муркок Майкл Джон
Шедевры фантастики
Фантастика:
фэнтези
героическая фантастика
5.60
рейтинг книги
Хроники Корума (сборник)

Неукротимый Бастард. Дилогия

Измайлов Сергей
Неукротимый бастард
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неукротимый Бастард. Дилогия