Нытьё
От: Sealcon190 Соломоновы острова  
Дата: 13.02.09 08:09
Оценка:
Сегодня пол рабочего дня потратил на попытки понять, почему не обновляется изображение в окне.

При изменении параметров фона обновляется.
При изменении параметров шума обновляется.
При изменении параметров дефектов не обновляется.

Просмотрел и облазил всё. Даже поползал на коленках по пыльным исходникам COM-объекта. Всё везде нормально, а окно не обновляется хоть тресни. Уже подленькая мыслишка написать баг-репорт мелкомягким закралась, типа, глючит ваша VS.

А оказалось что просто вместо UpdateResult() написал на автомате UpdateData(). Глаз эту строчку проскакивал не цепляясь – ну апдейт и апдейт.

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

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

Это старость так подкрадывается или что?
Re: Нытьё
От: LaptevVV Россия  
Дата: 13.02.09 08:18
Оценка:
Здравствуйте, Sealcon190, Вы писали:

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

S>Это старость так подкрадывается или что?
Не... Это просто говорит о том, что пока наши инструменты не очень совершенны.
Я тоже однажды два часа потратил в поиске элементарной описки: скобки забыл указать в одном выражении, в итоге цвет фона не менялся.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Нытьё
От: alzt  
Дата: 13.02.09 08:40
Оценка: +1
Здравствуйте, Sealcon190, Вы писали:

Ну тоже пожалуюсь.
Была в коде не инициализированная переменная. Далее вызывалась функция, которая её инициализировала. Но, при внимательном осмотре, оказалось, что не всегда.
В результате под дебагом работало всё отлично, а в релизе глюки возникали.

Мораль — всегда инициализируйте ваши переменные.
Re: Нытьё
От: neFormal Россия  
Дата: 13.02.09 08:42
Оценка:
Здравствуйте, Sealcon190, Вы писали:

S>Это старость так подкрадывается или что?


да, дальше будет только хуже..
...coding for chaos...
Re: Нытьё
От: sc Россия  
Дата: 13.02.09 09:15
Оценка:
Когда что-то не получается и непонятно почему, садимся вдвоем разбираться.
Re: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 09:23
Оценка:
Здравствуйте, Sealcon190, Вы писали:

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


Ну не пол дня но мои 5 копеек:


Constructor()
  : m_bInit(false)
{ }

bool Init()
{
   if (IsInit)  // he-he
     return true;

   // some initialization
   
   return m_bInit = true;
}

bool IsInit() const
{
   return m_bInit;
}

bool SomeFoo()
{
   if ( !IsInit() )
      return false; // WTF????

   // some work

   return true;
}
Re[2]: Нытьё
От: CreatorCray  
Дата: 13.02.09 09:26
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Не... Это просто говорит о том, что пока наши инструменты не очень совершенны.

А собственно как инструмент сможет понять что автор задумывал, чтоб как то помочь с исправлением опечатки?

LVV>Я тоже однажды два часа потратил в поиске элементарной описки: скобки забыл указать в одном выражении, в итоге цвет фона не менялся.

Какой инструмент помог бы тебе обнаружить что скобки не стоят там где ты хотел?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Нытьё
От: alzt  
Дата: 13.02.09 09:32
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>
S>bool Init()
S>{
S>   if (IsInit)  // he-he
S>     return true;

S>   // some initialization
   
S>   return m_bInit = true;
S>}
S>


Не зря в C# запретили подобное.
А вообще надо на варнинги смотреть. VS2005:
warning C4551: function call missing argument list.
Re[2]: Нытьё
От: CreatorCray  
Дата: 13.02.09 09:36
Оценка:
Здравствуйте, Sashaka, Вы писали:

S> if (IsInit) // he-he

S> return true;

S> if ( !IsInit() )

S> return false; // WTF????

Чорт. А я тупил что не так в строке с WTF
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 09:38
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>Здравствуйте, Sealcon190, Вы писали:


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


S>Ну не пол дня но мои 5 копеек:


и еще:



bool SomeClass::SomeFoo()
{
   //...
   for (int i=0; i<eMaxParam; ++i)
   {
      param[i] = ReadParam( m_strSomeKey[i], default, file ); // WTF???
   }
   //...
   return true;
}

// ...

const CString SomeClass::m_strSomeKeys[eMaxParam] = 
{
  _T("Param1Key"),
  _T("Param2Key"),
  _T("Param3Key"),
  //...
  _T("Param20Key"),
  _T("Param21Key")   // he-he
  _T("Param22Key"),
  //...
  _T("ParamNKey")
};
Re[3]: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 09:40
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Sashaka, Вы писали:


S>> if (IsInit) // he-he

S>> return true;

S>> if ( !IsInit() )

S>> return false; // WTF????

CC>Чорт. А я тупил что не так в строке с WTF


И я тупил =)
Re[3]: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 09:45
Оценка:
Здравствуйте, alzt, Вы писали:

A>Здравствуйте, Sashaka, Вы писали:


S>>
S>>bool Init()
S>>{
S>>   if (IsInit)  // he-he
S>>     return true;

S>>   // some initialization
   
S>>   return m_bInit = true;
S>>}
S>>


A>Не зря в C# запретили подобное.

A>А вообще надо на варнинги смотреть. VS2005:
A>warning C4551: function call missing argument list.

Согласен, даже VS6 дает warning, но там в проекте куча ворнингов, которые до сих пор не устранены, ибо влом и нет времени (я понимаю это мой косяк =).

Но например вот на такое:

bool bRet = false;
//...
if (bRet=IsInit)
{
   //...
   return false;
}


VS6 не ругается =)
Re[4]: Нытьё
От: CreatorCray  
Дата: 13.02.09 10:20
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>Согласен, даже VS6 дает warning, но там в проекте куча ворнингов, которые до сих пор не устранены, ибо влом и нет времени (я понимаю это мой косяк =).

Мой подход: Treat warnings as errors
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 10:27
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Sashaka, Вы писали:


S>>Согласен, даже VS6 дает warning, но там в проекте куча ворнингов, которые до сих пор не устранены, ибо влом и нет времени (я понимаю это мой косяк =).

CC>Мой подход: Treat warnings as errors

+100, просто мопед (проект) не мой, надо добавить быстро фич и в путь =)
Re[6]: Нытьё
От: Mishka Норвегия  
Дата: 13.02.09 10:30
Оценка:
Пишите на VBA и будет вам счастье
Re[3]: Нытьё
От: March_rabbit  
Дата: 13.02.09 10:34
Оценка: 6 (2)
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, LaptevVV, Вы писали:


LVV>>Не... Это просто говорит о том, что пока наши инструменты не очень совершенны.

CC>А собственно как инструмент сможет понять что автор задумывал, чтоб как то помочь с исправлением опечатки?

LVV>>Я тоже однажды два часа потратил в поиске элементарной описки: скобки забыл указать в одном выражении, в итоге цвет фона не менялся.

CC>Какой инструмент помог бы тебе обнаружить что скобки не стоят там где ты хотел?
общая идея такова: не должно быть места тупым опечаткам. И, если в имени функции можно допустить опечатку, то во всяких синтаксических конструкциях должно быть все жестко.....

Классический пример: http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%B8%D0%BD%D0%B5%D1%80-1.
Re: Нытьё
От: March_rabbit  
Дата: 13.02.09 10:39
Оценка:
Здравствуйте, Sealcon190, Вы писали:

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


S>А оказалось что просто вместо UpdateResult() написал на автомате UpdateData(). Глаз эту строчку проскакивал не цепляясь – ну апдейт и апдейт.


бывает. У меня вот типичная ошибка — забыть приращение итератора, когда прохожусь по контейнеру. Стараюсь использовать for — там все жестко, трудно ошибиться. Но вот иногда применяю while и все. Первый запуск, естественно, — подвисон из-за забытого приращения
не реализован приличный FOREACH и все....
Re[2]: Нытьё
От: CreatorCray  
Дата: 13.02.09 11:15
Оценка:
Здравствуйте, March_rabbit, Вы писали:

M_>не реализован приличный FOREACH и все....

Помоги себе сам.

C++0x
#define foreach(it,cont)    if (false) {} else for (auto it = (cont).begin(), foreach_end_##it = (cont).end();it != foreach_end_##it;++it)

std::whatever<MyType> container;

foreach(it,container)
{
    it.DoSomethingUseless();
}


if (false) {} else — нужно для workaround МС бага в for, когда переменная в нем имела не локальную видимость. Оставлено для совместимости.

Для C++ не 0х достаточно добавить параметр типа контейнера (или итератора).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Нытьё
От: Sashaka Россия  
Дата: 13.02.09 11:18
Оценка:
Здравствуйте, Mishka, Вы писали:

M>Пишите на VBA и будет вам счастье


Сами пишите =) Мы и так счастливы =)
Re: Нытьё
От: SE Украина  
Дата: 14.02.09 09:12
Оценка:
Здравствуйте, Sealcon190, Вы писали:

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


S>Глаз эту строчку проскакивал не цепляясь – ну апдейт и апдейт.


S>Это старость так подкрадывается или что?


Нет. Это называет невнимательность.
Однажды программист достигает уровня, когда код пишется легко и непружденно, и взгляд охватывает весь код целиком, со всеми его побочными эффектами.
И тогда единственной причиной ошибок остается невнимательность.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.