Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  19:17[Войти] | [Зарегистрироваться]
Обсуждение темы:
Давайте учиться на ошибках.

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

Предложение такое: если житель Королевства провел более N часов за отловом ошибки и успешно ее изничтожил, то пусть он напишет об этом в специальный раздел (который еще предстоит создать), описав симптомы проблемы, способ исправления и как надо было ему действовать изначально, чтобы не сталкиваться с нею вообще.

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

Admin

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 23 сообщения

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Тестирование проекта. Отладка.
  • Подводные камни
  • Централизованная обработка ошибок
  • Бета-тестирование
  • Почему программисты допускают ошибки?
  • Автоматизированные тесты для GUI
  • О системах контроля ошибок
  • Вопросы оптимизации кода

  • 23—14 | 13—4 | ...>>>
    Всего сообщений в теме: 23; страниц: 3; текущая страница: 1


    № 23   Удалено модератором


    № 22   04-09-2005 12:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Я насчёт windowsAPI
    замечания
    1.накоторые функции трубуют, чтобы под все их
    параметры - указатели было выделено достаточно памяти(getvolumeinformation, например)
    2.некоторые функции через VARвыдают
    Pchar, данные в котором разделены #0 (stringlist пролетает)
    проблема решается :


    FOR i:=0 to ... do
    if p[i] = #0 then p[i]:=' ';


    3.после данных идёт "мусор" на величину оставшийся
    распределёной памяти


    № 21   26-08-2005 16:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Что-то меня сюда занесло. Вот и решил выложить одно наблюдение. А заодно и попытаться возродить полезную тему.

    Не очень часто, но с завидной регулярностью встречаются ошибки, связанные с непониманием асинхронных процессов. Типа, пишет человек работу с устройством, подключенным через COM-порт. Посылает он в порт команду, а следующим оператором считывает из порта результат. Естественно, результат оказывается совсем не тот, который нужен. Пытается гонять под отладчиком, все работает нормально. Непонимание на лице и вопросы на Круглом Столе.

    Другой типичный пример такого рода ошибок -- непонимание того, что зачастую изменения определеных свойств компонент реализованы через пересылку сообщенй. Соответственно, значение не будет изменено, пока не отработает процедура пользователя (про ProcessMessages такой человек, естественно, тоже не имеет никакого представления). Результат тот же: при выполнении программа глючит, под отладчиком работает как надо.

    P.S. После первых двух разборок с подобными ляпами хотел было написать в Подводные Камни, но не сумел сходу выдержать принятый там стиль изложения и отложил до лучших времен. А вот тут нашел тему, где можно излагать свободным стилем и обрадовался :-)
     Geo


    № 20   04-01-2002 01:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    А материальчик-то начинает накапливаться...

    Вот еще (все знают, но не все помнят):
      от перестановки слагаемых (вещественных) сумма меняется, причем очень здорово. Не сравнивайте результаты работы разных вычислительных алгоритмов (решающих одно задачу) побайтно. Не стоит также их сравнивать с учетом вычислительной погрешности.
      Вместо этого придумайте целое число (или несколько), которое бы однозначно характеризовало правильность работы алгоритма. То есть, перед пуском алгоритма оно - 0, а потом при выполнении какого-либо вычислительного действия увеличивается.


    № 19   01-01-2002 19:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Привет, NO! Неплохой списочек огласил.
    Расписать это всё, "как для маленьких детей" (с) Dimentiy. Попытаться классифицировать, структурировать.
    "Медвежьи услуги" - целый класс особо вредных ошибко-возбудителей, и не только от Microsoft; хорошая тема для диссертации.


    № 18   01-01-2002 17:21 Ответить на это сообщение Ответить на это сообщение с цитированием
    Мои любимые ошибки и как этого добиться.
    1.Плюс-минус единица - индексы в [отрезках],(интервалах),[полуинтервалах).
    -непривычное описание массива - [0.. или [1.. или ..max-1]
    -деление строки на подстроки - средний символ должен попасть в одну из половин
    -2 вида счетчиков: указывает на последний занятый или на первый свободный
    элемент буфера
    2."Access Violation" - стрелка без компаса.
    -использование неинициализированного указателя. NT, 2000 чистят память перед
    запуском программы, поэтому указали часто =nil, медвежья услуга MS.
    -обращение по nil'у. Полезно в mylib.pas  иметь процедуру notnil(p:pointer), а
    ее код поставить внутри {$IFDEF DEBUG}
    3.Утечка памяти.
    -owner=nil
    -exit'ы
    -нет finalization
    4.Синхронизация.
    -при включенной оптимизации for может выполняться в обратную сторону
    -во время Application.ProcessMessages происходит рекурсивный вызов;
    -дебагер позволяет ставить прерывания на присвоение в Watch
    5.Логические ошибки.
    -если не пользуетесь UML, то хотя бы положите перед клавиатурой лист
    бумаги и все нарисуйте.
    -всему давайте имена, и объектам и условиям. При программировании возникают

    интуитивные образы легко перепутать.
    6.Забывчивость.
    -поле в описании класса добавили, а в инициализации и обработке не прописали
    -ставьте комментарии типа //!
    -если ошибку нашли, то это была ошибка не в программе, а в Вашем уме,
    поэтому проверьте что вы еще похожего могли наваять.
    7.Путаница.
    -ничего не оптимизируйте пока не работает
    -пишите сверху вниз, лучше иметь кучу заглушек, чем не нужный код.
    -лучше официально оставить ошибку, чем срочно рушить все остальное, люди
    жили без вашей программы, проживут и без ее кусочка.
    8.Начальство.
    -постановка задачи это уже программирование, за это платят Вам а не боссу,
    как бы он напорист не был.
    9.Проверяйте входящие данные. Мир не Вы писали.


    № 17   01-01-2002 13:52 Ответить на это сообщение Ответить на это сообщение с цитированием
    Народ, я так понимаю, что грабли они и в Африке грабли. У каждого программера свои грабли. Одни их прошли и забыли, вторые только подбираются к ним. Причем грабли могут быть как сотворенные программером, так и сотворенные другими программерами. А этот проект задумывался как нечто, помогающее найти, где валяются грабли и благополучно их обойти.
    В таком случае надо будет делать поисковик - это я не к тому, что граблей будет много :-) (хотя может и так...) Просто иногда очень трудно найти хотя бы в том же MSDN то, что тебе нужно. И дело не в том, что искать не умею - дело в том, что я знаю, чего хочу, но не знаю, как ЭТО обозвали программеры от Микрософт. Думаю, кто с таким же сталкивался - тот меня поймет. Просто иногда получается, что если я хочу узнать, как мне, например, сделать мультипотоковый обработчик сокетов, мне надо перевернуть гору документации, а потом сотворить нечто, вроде как бы и работающее... Потом через месяц возвращаюсь к исходникам и перелопачиваю алгоритм...
    Короче, я "за" проект. Вот только вопрос - будет ли он только Дельфийским? Я пишу на BC++B, а это, как известно, тот же Delphi, но с СИшным синтаксисом... :-)) Но все же различия между языками есть, соответственно, и грабли будут различаться...


    № 16   25-12-2001 16:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    Анализируя вопросы в наш support, и опыт преподавания Delphi нашим сотрудникам, могу сказать, что для разного уровня программистов свойственны разные грабли :))) Так что все это можно объеденить, даже было бы нужно, но вот кто будет тратить свое драгоценное время? И какого уровня познаний будут эти люди?

    А пока вот 2 глюка на которые наступают почти все (на начальном уровне):

    ================================
    1.

    Название: Непонимание создания и освобождения компонента "руцями"
    Симптомы: AV в освобождении форм, классов, контролов...
    Как делают:
    Создают компонент, в конструкторе другого компонента например, и указывают Owner. А потом в деструкторе, или еще, где освобождают этот компонент... Например:

    В конструкторе

    MyComponent := TMyComponent.Create(Self {Form1, etc.});

    В деструкторе

    MyComponent.Free;

    Как надо:
    Если Owner, при создании, задается не nil, то об удалении такого компонента позаботится его овнер. ПРИ Owner <> nil "РУЦЯМИ" КОМПОНЕНТ ОСВОБОЖДАТЬ НЕ НАДО :)))

    ================================
    2.

    Название: Непонимание класса и переменной типа класс.
    Симптомы: Страшные и непонятные глюки при создании более одной копии объекта. AV в разных, непонятных местах.
    Как делают:
    В методах класса (чаще всего формы), используют переменную классового типа для задания свойств или вызова методов. Например:

    type
      TMyForm = class(TForm)
    ...
      end;

    var
      MyForm: TMyForm;

    А в методах TMyForm делают что-то типа такого:

    procedure TMyForm.FormShow(Sender: TObject) ;
    begin
      MyForm.Caption := 'Visible';
      MyForm.Timer1.Enabled := True;
    end;

    Как надо:
    Не использовать переменную, а использовать свойства и методы класса, иначе 2 копия класса будет “ломать дрова” с первой копией…

    procedure TMyForm.FormShow(Sender: TObject) ;
    begin
      Caption := 'Visible';
      Timer1.Enabled := True;
    end;

    ================================

    Это так, для начала, а вообще полно разных FAQов….

    ====================
    KARPOLAN,
    ABF software, Inc. - custom software development and web design.
    Borland Technology Partner.
    Member of Association of Shareware Professionals (ASP)
    mailto:karpolan@ABFsoftware.com
    http://www.ABFsoftware.com
    http://www.ValueConverter.com - Measurement units converter.


    № 15   24-12-2001 22:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    Главное -- с чего-нибудь начать. Для начала можно было бы обязать всех высказавшихся по этой теме написать доклад о хитроумном, но побежденном глюке и отправить его (доклад) в Королевство.


    № 14   21-12-2001 19:00 Ответить на это сообщение Ответить на это сообщение с цитированием
    Да, забыла сказать:
    Анна права, не стоит помещать туда нерешенные задачи.
    Но прав и muh, есть "камни", которые исправить нельзя, но найден  путь обхода этих грабель. Хотя, этот путь и можно считать решением на конкретном этапе нашего развития :о)

    В общем, не будем плодить сущности, не будем устраивать филиала Круглого стола.
    Идет?


    23—14 | 13—4 | ...>>>
    Всего сообщений в теме: 23; страниц: 3; текущая страница: 1


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования