Linux программирование в примерах
Шрифт:
Вот сокращенный пример из
После установки и сохранения
ЗАМЕЧАНИЕ. Начиная с GCC 3.1 и версии 5 GDB, если вы компилируете свою программу с опциями
Однако, использовать макросы таким способам позволяет лишь комбинация GCC, GDB и специальных опций: если вы не используете GCC (или если вы используете более старую версию), у вас все еще есть проблема. Мы придерживаемся своей рекомендации избегать по возможности таких макросов.
Проблема с макросами распространяется также и на фрагменты кода. Если макрос определяет несколько операторов, вы не можете установить контрольную точку в середине макроса. Это верно также для inline-функций C99 и С++: если компилятор заменяет тело inline-функции сгенерированным кодом, снова невозможно или трудно установить внутри него контрольную точку. Это имеет связь с нашим советом компилировать лишь с одной опцией
Обычно с такими строками используется переменная, представляющая определенное состояние. Довольно просто, и это рекомендуется многими книгами по программированию на С, определять с помощью
На уровне исходного кода это выглядит замечательно. Но опять-таки, есть проблема, когда вы пытаетесь просмотреть код из GDB:
Здесь вы также вынуждены возвращаться обратно и смотреть в заголовочный файл, чтобы выяснить, что означает 2. Какова же альтернатива?
Рекомендация: Для определения именованных констант используйте вместо макросов перечисления (enum). Использование исходного кода такое же, а значения enum может выводить также и отладчик.
Пример, тоже из
Теперь при просмотре state из GDB мы видим что-то полезное:
15.4.1.3. При необходимости переставляйте код
Довольно часто условие в
Рекомендация: перепишите исходный код, явно используя временные переменные, в которых сохраняются значения или условные результаты, так что вы можете проверить их в отладчике. Первоначальный код должен быть сохранен в комментарии, чтобы вы (или программист после вас) могли сказать, что происходит.
Вот конкретный пример: функция
Мастер 11
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
рейтинг книги
Ваше Сиятельство
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
рейтинг книги
Газлайтер. Том 29
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Газлайтер. Том 15
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
рейтинг книги
На границе империй. Том 9. Часть 2
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Наследник старого рода
1. Живой лёд
Фантастика:
фэнтези
рейтинг книги
Младший сын
1. Государи московские
Научно-образовательная:
история
рейтинг книги
Кодекс Охотника. Книга II
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
рейтинг книги
Инженер Петра Великого 6
6. Инженер Петра Великого
Фантастика:
альтернативная история
фэнтези
попаданцы
рейтинг книги
Кодекс Охотника. Книга XVIII
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Собрание сочинений (Том 1)
Детские:
прочая детская литература
рейтинг книги