Re[9]: Неотлавливаемые баги
От: rudzuk  
Дата: 16.12.21 17:51
Оценка:
Здравствуйте, Khimik, Вы писали:

K> У меня вроде такой ошибки с динамическим массивом нет, а баг остался. Может быть у меня где-то код обращается к свойству класса, который не инициализирован или который финализирован? Я не помню, по умолчанию такие ошибки срабатывают? Можно ли включить их проверку?


Нет, такие ошибки автоматически не ловятся. Если у твоих объектов есть общий предок, можно в нем перекрыть метод FreeInstance и самостоятельно очищать освобождаемую память, это поможет отловить обращения к освобожденным объектам. А можно просто взять менеджер памяти FastMM и активировать в нем необходимые опции для отладки (FastMM4Options.inc).
avalon/3.0.0
Re: Неотлавливаемые баги
От: Sharov Россия  
Дата: 16.12.21 21:24
Оценка: +2
Здравствуйте, Khimik, Вы писали:

K>Бывало ли у вас, что вы безуспешно пытаетесь найти баг, не получается, в конце концов отчаиваетесь и решаетесь на это забить?


Да наоборот, даже азарт просыпается на фоне унылой и тоскливой разработки или поддержке легаси. Т.е. можно сказать, что
это та самая романтика с чашкой кофе на ночь. Некий вызов, я бы даже сказал.
Кодом людям нужно помогать!
Re: Неотлавливаемые баги
От: LuciferSaratov Россия  
Дата: 16.12.21 21:38
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>Бывало ли у вас, что вы безуспешно пытаетесь найти баг, не получается, в конце концов отчаиваетесь и решаетесь на это забить?


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

другой баг на этом же проекте отнял ещё больше времени.
воспроизводился он крайне странно: порой один раз из двухсот попыток, порой сериями по несколько раз подряд.
в итоге удалось его локализовать — корни ушли в системную библиотеку Xbox One.
"хакерскими" методами удалось его обойти, но майкрософт это не заапрувил (тут претензии уже есть).
баг в итоге остался, ушёл в продакшен, но я хотя бы могу с чистой совестью страдания пользователей не принимать на свой счёт.
Re[10]: Неотлавливаемые баги
От: ArtDenis Россия  
Дата: 17.12.21 12:27
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Сходу не нагуглил


Не верю, что ничего не нагуглилось. Тут в соседнем ответе уже подсказали одно из средств.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Неотлавливаемые баги
От: kl Германия http://stardog.com
Дата: 17.12.21 13:26
Оценка: :)
Здравствуйте, Khimik, Вы писали:

K>Бывало ли у вас, что вы безуспешно пытаетесь найти баг, не получается, в конце концов отчаиваетесь и решаетесь на это забить?


Ну не так чтобы совсем забить, не было, но было что баг я за какое-то время найти не смог, он случался крайне редко и только на стресс-тестах и при этом дополнительное логгирование еще уменьшало его вероятность. Ну т.е. скорее всего data races где-то были. В какой-то момент он исчез, скорее всего был пофикшен в результате рефакторинга. Я даже примерно подозреваю, какое именно изменение его пофиксило, но откатив только его, я все равно не смог его воспроизвести за приемлимое время, чтобы быть на 100% уверенным.
Я считаю что это ничья
no fate but what we make
Re[10]: Неотлавливаемые баги
От: Khimik  
Дата: 17.12.21 17:36
Оценка:
Здравствуйте, rudzuk, Вы писали:

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


K>> У меня вроде такой ошибки с динамическим массивом нет, а баг остался. Может быть у меня где-то код обращается к свойству класса, который не инициализирован или который финализирован? Я не помню, по умолчанию такие ошибки срабатывают? Можно ли включить их проверку?


R>Нет, такие ошибки автоматически не ловятся. Если у твоих объектов есть общий предок, можно в нем перекрыть метод FreeInstance и самостоятельно очищать освобождаемую память, это поможет отловить обращения к освобожденным объектам.


У всех моих объектов действительно есть общий предок, но я не понял вашу идею. Как может ручное очищение памяти быть полезным, чтобы определить, обращался ли кто-то к этой памяти после очищения?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[11]: Неотлавливаемые баги
От: rudzuk  
Дата: 17.12.21 18:57
Оценка:
Здравствуйте, Khimik, Вы писали:

K> У всех моих объектов действительно есть общий предок, но я не понял вашу идею. Как может ручное очищение памяти быть полезным, чтобы определить, обращался ли кто-то к этой памяти после очищения?


Смысл в том, чтобы поля освобожденного объекта имели недопустимые значения. Простой пример:
program Project1;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;
type
 TObj = class(TObject)
  FString : string;
  procedure FreeInstance; override;
 end;
procedure TObj.FreeInstance;
begin
 CleanupInstance;
// FillChar(Pointer(Self)^, InstanceSize, $EF);
 FreeMem(Pointer(Self));
end;
begin
  try
   var obj := TObj.Create;
   obj.FString := 'hello';
   writeLn('"', obj.FString, '"');
   obj.Free;
   writeLn('"', obj.FString, '"');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
 readln;
end.

Сначала запусти как есть, потом раскомментируй FillChar и запусти снова.
avalon/3.0.0
Re: Неотлавливаемые баги
От: SkyDance Земля  
Дата: 18.12.21 06:20
Оценка:
K>Бывало ли у вас, что вы безуспешно пытаетесь найти баг, не получается, в конце концов отчаиваетесь и решаетесь на это забить?

Нет.

K>У меня за 15 лет разработки моего проекта это было, насколько я помню, два раза. Я думаю – может это баги в Delphi? Тогда уж наверно ничего не поделаешь, разве что написать для пользователей инструкцию – “не делайте так-то, это вызывает проблемы”.


То есть вы даже сквозь один уровень не смогли прорваться? Мне доводилось пробираться сквозь уровни кода на языке программирования, через виртуальную машину для байткода, далее через контейнер, ядро ОС и в итоге баг таки был выявлен в BIOS. Причем такие расследования не то чтоб сложные, ибо баг воспроизводился сам по себе и с довольно высокой частотой/вероятностью.

Самые сложные баги — это те, которые сложно воспроизвести. Скажем, что-то, что случается на одной машине из 40 тысяч раз в неделю.
Re[12]: Неотлавливаемые баги
От: Khimik  
Дата: 19.12.21 19:46
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Сначала запусти как есть, потом раскомментируй FillChar и запусти снова.


InstanceSize это размер всех полей класса? Вашем пример не до конца корректный — заполняться значением $EF будет не вся строка FString, а только указатель на неё (само поле FString размером 4 байта)?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[13]: Неотлавливаемые баги
От: rudzuk  
Дата: 20.12.21 07:27
Оценка:
Здравствуйте, Khimik, Вы писали:

K> R>Сначала запусти как есть, потом раскомментируй FillChar и запусти снова.


K> InstanceSize это размер всех полей класса?


Да.

K> Вашем пример не до конца корректный — заполняться значением $EF будет не вся строка FString, а только указатель на неё (само поле FString размером 4 байта)?


Всю строку заполнять смысла нет. Тут главное именно в том, чтобы сделать поля невалидными.
avalon/3.0.0
Re: Неотлавливаемые баги
От: ути-пути Россия  
Дата: 21.12.21 04:26
Оценка:
Здравствуйте, Khimik, Вы писали:

Почитал ответы: почти все пишут, что не было такого, по 2 месяца ловят, но находят, и т.п. Стало интересно, раз все такие идеальные, то кто все те люди, которые поддерживают софт, у которого общеизвестные баги годами без движения висят?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: Неотлавливаемые баги
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 21.12.21 06:56
Оценка: :))
Здравствуйте, ути-пути, Вы писали:

УП>Почитал ответы: почти все пишут, что не было такого, по 2 месяца ловят, но находят, и т.п. Стало интересно, раз все такие идеальные, то кто все те люди, которые поддерживают софт, у которого общеизвестные баги годами без движения висят?


Они сюда не заходят, им стыдно.
The God is real, unless declared integer.
Re[2]: Неотлавливаемые баги
От: bnk СССР http://unmanagedvisio.com/
Дата: 21.12.21 09:05
Оценка: +1
Здравствуйте, ути-пути, Вы писали:

УП>Почитал ответы: почти все пишут, что не было такого, по 2 месяца ловят, но находят, и т.п. Стало интересно, раз все такие идеальные, то кто все те люди, которые поддерживают софт, у которого общеизвестные баги годами без движения висят?


Это другое
И у меня есть баги которые годами лежат. Но если бы я таки слез с печи и взялся их чинить, то обязательно добил бы.
Re[2]: Неотлавливаемые баги
От: AntoxaM  
Дата: 21.12.21 09:51
Оценка: +1
Здравствуйте, ути-пути, Вы писали:

УП>Здравствуйте, Khimik, Вы писали:


УП>Почитал ответы: почти все пишут, что не было такого, по 2 месяца ловят, но находят, и т.п. Стало интересно, раз все такие идеальные, то кто все те люди, которые поддерживают софт, у которого общеизвестные баги годами без движения висят?

У багов может быть низкий приоритет и за них просто никто не берётся — все чинят более важное. Или стоимость починки большая. Такое может висеть до конца жизни системы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.