Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отладка в C++. Может быть полезна каждому программеру. 
:(
    Опции темы
CppDevelopeR
Дата 5.7.2008, 18:48 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Привет форумчане. Решил писать статьи по отладке программ. Мне кажется, статьи довольно полезны. Так же очень прошу выкладывать ваши мнения, так как мне это очень важно, это мои первые статьи. И так, начнем!
 А начнем с введения в проблему.
Обоснование технологии отладки.
    Все мы наверное читали многочисленные рассказы о  результатах плохого программирования: диапозон случаев распространияется от банковских ошибок в прогах, которые приводили к убыткам фондов без должной причины, до медецинских ошибок в записях или до ошибок в космических системах свяхи, которые срабатывали неверно(Был случай, какойто американский программер ошибся на 1 цифру, И ракета взорвалась). В ряде случаях серьезные увечья или осложнения со здоровьем были следствием неисправностей в общественном транспорте или неисправностей в медицинском оборудовании, которые возникали по вине программных ошибок.
     Эти проблемы часто возникают как результат багов(ошибок), которые были привнесены в программный код программистом и не были обнаружены и устранены. Чтобы минимизировать ошибки, которые возникаютпри написании программ, чрезвычайно важно сначала освоить основы хорошего программирования и далее постоянно держать их в уме. Очень хорошим источником для освоения хорошего стиля разработки и реализации программ является популярная книга Практика Программирования, написанная Кернинганом и Пайком.
     Технология хорошего программирования осваивается по мере проведения изнурительной работы с акцентированием внимания на множестве деталей. В хорошо разработанной программе будут устранены многие ошибки, но не все. Часто программный код будет содержать ошибки даже в хорошо спроектированной системе.
    После того как синтаксические ошибки были устранены, программист в большей части должен будет самостоятельно найти, так называемые "семантические" ошибки. Такие ошибки свойственны коду с правильным синтаксисом, но который все еще имеет неправильную логику. И поэтому возникают ошибки при исполнении программы. Некоторые из таких ошибок очень трудно обнаружить. Поэтому может возникнуть потребность в разработке специальных средств для их обнаружения. Оснавная цель моих статей - представить необходимые подходы и возможности, которые  позволяют найти и скорректировать семантические ошибки. Используют два наиболее действенных средства по корректированию семаетических ошибок, которые обычно встречаются в первых программах программистов, можно привести: случаи использования символа "<" вместо "<=" в условиях, определяющих завершение цикла(у самога такая ошибка на начальной стадии программирования была); случаи обращения за элементами массива, которые находятся вне области определения массива; случаи, когда программист просто забывает инициализировать переменные.
     Многие ошибки, которые возникают в ходе исполнения программы, могут быть обусловлены не логикрй программы, а связаны со значениями данных, что и приводит к проблеме. Типичный пример возникновения такой ошибки можно  проиллюстрировать в случае, когда непосредственно перед выполнением операции деления знаменатель становится равным нулю, и система выдает диагностическое сообщение об ошибки типа "program error: attempted to divide by zero.".  Подобного рода рода ошибки могут обнаруживаться и корректироваться средствами трассировки и отладчика. Средствами, которые я рекомендую в этих статьях. Ошибки могут так же обнаруживаться и автоматически, используя для этого технику обработки исключительных ситуаций, свойственную обьектно - ориентированному С++. Но этот метод выходит за пределы этих статей.
      Некоторые ошибки возникают в результате поступления на обработку программе "плохих" входных данных, а никак не по вине программиста. Однако программист ОБЯЗАН включить в свой программный код проверку наличия поступивших "плохих" входных данных с тем, чтобы выдавать сообщения об ошибках, когда будут обнаружены "плохие" данные. А в некоторых случаях, при обнаружении таких данных - завершить выполнение программы. Такие проверки часто называют "error checking".

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


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.7.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



нда...
ладно, подождем вторую "статью"


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CppDevelopeR
Дата 5.7.2008, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



MAKCim, скажите что вам не понравилось во вступлении. Мне кажется что слишком сухо, как в энциклопедии или толковом словаре каком нить. Скажите, это важно.


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
CppDevelopeR
Дата 5.7.2008, 19:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Статья номер 2.

Методы отладки.

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

1. Ручная трассировка

     Согласно этому методу вы просматриваете программный листинг и прослеживаете вручную в пошаговом режиме выполнение программы, пытаясь воссоздать результаты фактического программного выполения. Такой подход обыно является хорошим отправным пунктом для коррекции ошибок, особенно для небольших программ или простых функций. Он заставляет программиста думать о логике программы в методической плоскости. Для больших программ этот подход может быть весьма времяемким. Поэтому, возможно, придется прибегнуть к машиной(программной) трассировке.

2. Программная трассировка

     Программная трассировака использует трассировочные предложения, включенные в программы в ключевых местах программы, чтобы проследить изменения значений переменных по мере пошагового выполнения программы. Трассировку можно осуществить посредством включения потока cout в C++ по ходу расположения трассы. Предложения используются для определения текущих значений всех переменных. Расширенная трассировка допускает использование флагов и функциональных вызовов. С их помощью можно более просто включать и выключать трассировку и минимизировать объем дополнительного кода, который должен быть написан и включен в программу.

3. Системный диалоговый отладчик

     В большинстве современных сред языков программирования включен отладчик. Он представляет собой программный пакет, с помощью которого можно выполнять программу в пошаговом режиме, автоматически отслеживая изменения значений после каждого шага. Можно также установить контрольные точки, что позволяет программе избежать больших накладных расходов при выполнении участков программы вне пределов трассиовки и позволяют останавливать выполнение программы для отображения всех программных переменных и их значений.
     Все перечисленные мною методы отладки полезны и заслуживают узучения и использования. Я рекомендую начинать работу с ручной трассировкой, поскольку этот  метод заставляет вас полностью осознать программные требования и логику своей программы. Если этот метод не позволяет определить места расположения ошибок выполнения (runtime errors), я рекомендую использовать расширенную программную трассировку на основе включения в текст программы потоков cout.

     В большинстве программ этот метод позволяет обнаружить все семантические и другие ошибки выполнения и будет вполне удовлетворительным. Однако в ряде случаев может возникнуть желание использовать системный диалоговый отладчик. Выбор между программной трассировкой и системным отладчиком часто является субъективным. Чтобы выбор был аргументирован, выжно знать - в чем суть использования этих методов. 

     Вот моя 2 статья завершена. Пишите отзывы. В следующей статье мы приступим к обсуждению деталей отладки. Спасибо за внимание!
     



--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
W4FhLF
Дата 5.7.2008, 20:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



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

Цитата(CppDevelopeR @  5.7.2008,  19:36 Найти цитируемый пост)
 Можно также установить контрольные точки, что позволяет программе избежать больших накладных расходов при выполнении участков программы вне пределов трассиовки и позволяют останавливать выполнение программы для отображения всех программных переменных и их значений.


Круто, ты для кого пишешь такие предложения?)





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Lazin
Дата 5.7.2008, 20:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Капитан Очевидность среди нас smile 

Цитата(MAKCim @  5.7.2008,  19:12 Найти цитируемый пост)
нда...

Если учесть, что на форуме задаются вопросы - как сделать из срр ехе, то наверное статья будет востребована smile 

Цитата(CppDevelopeR @  5.7.2008,  18:48 Найти цитируемый пост)
После того как синтаксические ошибки были устранены, программист в большей части должен будет самостоятельно найти, так называемые "семантические" ошибки. 

странная у тебя терминология, не семантические, а логические, а так-же ошибки времени выполнения....


PM MAIL Skype GTalk   Вверх
CppDevelopeR
Дата 5.7.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(Lazin @  5.7.2008,  20:15 Найти цитируемый пост)
не семантические, а логические

Тут я поспорю. Каждый называет как хочет, имхо. 


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
Ripper
Дата 5.7.2008, 20:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Ребят, поймите психологию человека. Я уверен многие были такие же. Лучше объясните что не так, он опыта наберется. 
Я просто вспоминаю себя, со своими тупыми вопросами. В таком возрасте (если я не ошибаюсь, автор ещё где то в 8 классе? я точно не знаю) это многим свойственно.
Никто же не может (да и нужно ли?) запрещать писать ему. 
И перенесите во флейм чтоли, мне кажется, что действительно можно много чему научить человека - при его желании

Добавлено через 1 минуту и 22 секунды
p.s. статью не читал, но на лицо много грамматических ошибок и не хороших оборотов, вроде "программер", "какойто" и т.п.



--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
CppDevelopeR
Дата 5.7.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(Ripper @  5.7.2008,  20:20 Найти цитируемый пост)
И перенесите во флейм чтоли

Да уж лучше удалите мои статьи, но уж во флейм не надо плз.

Цитата(Ripper @  5.7.2008,  20:20 Найти цитируемый пост)
Лучше объясните что не так, он опыта наберется. 

 smile 


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.7.2008, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(CppDevelopeR @  5.7.2008,  20:20 Найти цитируемый пост)
Тут я поспорю. Каждый называет как хочет, имхо.  

Семантика в программировании


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CppDevelopeR
Дата 5.7.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(MAKCim @  5.7.2008,  20:34 Найти цитируемый пост)
Семантика в программировании


спасибо за ссылку.


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.7.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



CppDevelopeR, 
сравни то, что написано в википедии
и у тебя
по сути одно и то же
но форма изложения разная
в этом у тебя, имхо, основная проблема
кроме того, пока я вижу в статьях очевидные вещи, которые в общем-то не несут особой ценности: как мне показалось, льется вода ни о чем
попытайся углубиться и рассмотреть какую-то одну часть общей темы, но сделай это подробно и детально
смысл любой статьи - синтез сведений из различных источников по определенной теме для формирования у читателей целостного представления о ней
мало знать, как работают компоненты A, B, C системы X
важно знать как работает система X при помощи компонентов A, B, C



Это сообщение отредактировал(а) MAKCim - 5.7.2008, 20:50


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CppDevelopeR
Дата 5.7.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(MAKCim @  5.7.2008,  20:41 Найти цитируемый пост)
в этом у тебя, имхо, основная проблемакроме того, пока я вижу в статьях очевидные вещи, которые в общем-то не несут особой ценности

Хочу с уверенностью заверить, что это пока. Ну не умею я писать красивые вступления. Хоть убейте, не умею.

Добавлено через 58 секунд
Но следующие статьи, уверяю, будут достаточно интересны и познавательны.


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.7.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(CppDevelopeR @  5.7.2008,  20:44 Найти цитируемый пост)
Но следующие статьи, уверяю, будут достаточно интересны и познавательны. 

посмотрим


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CppDevelopeR
Дата 5.7.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(MAKCim @  5.7.2008,  20:47 Найти цитируемый пост)
посмотрим

Постараюсь оправдать ожидания.


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.