Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 49 50 51 52 53 54 55 56 57 [58]
 Re: Топик "как я лажанулся"  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1966
softwarer,

зачем придумывать самому себе страшилки?
6 апр 21, 21:10    [22305192]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
ъъъъъ
зачем Был неправ, вспылил. придумывать Но теперь считаю своё предложение самому безобразной ошибкой, раскаиваюсь, прошу себе дать возможность загладить, искупить. страшилки? Всё, ушел.

Исправил ошибки.
6 апр 21, 21:32    [22305199]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Maxim Rusov
EAccessViolation - в 99% случаев совершенно безопасна. Не опаснее ListIndexOutOfBounds.

Нет. Она свидетельствует о том, что софт сделал что-то странное, непредусмотренное. Состояние, вполне вероятно, нарушено. В лучшем случае АВ будет повторяться снова и снова, в худшем - порча памяти, зацикливание и т.д.
7 апр 21, 10:31    [22305290]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Maxim Rusov
Member

Откуда: Москва-Питер
Сообщений: 2483
Fr0sT-Brutal
Maxim Rusov
EAccessViolation - в 99% случаев совершенно безопасна. Не опаснее ListIndexOutOfBounds.

Нет. Она свидетельствует о том, что софт сделал что-то странное, непредусмотренное.

Как и любое исключение.

Fr0sT-Brutal
Состояние, вполне вероятно, нарушено. В лучшем случае АВ будет повторяться снова и снова, в худшем - порча памяти, зацикливание и т.д.

Если возникло AV - значит порчи памяти не было, система о тебе позаботилась. Гораздо хуже когда AV не возникло, а порча памяти была. Но тагда уже будут другие ошибки.

99% AV - это разыменование nil, обращение к полям неинициализированого объекта. На этот случай - младшие адреса адресного пространства приложения всегда защищены от записи.
7 апр 21, 10:57    [22305302]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Maxim Rusov
Если возникло AV - значит порчи памяти не было, система о тебе позаботилась.

В этот момент не было. Но AV нередко возникает в силу порчи памяти, случившейся ранее.
7 апр 21, 11:14    [22305313]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Maxim Rusov

Как и любое исключение.

Файл не найден? Соединение с сервером отвалилось? Некорректные входные данные? Исключений миллион, и надо различать предусмотренные (возможные) либо нештатные.

Maxim Rusov

Если возникло AV - значит порчи памяти не было, система о тебе позаботилась. Гораздо хуже когда AV не возникло, а порча памяти была. Но тагда уже будут другие ошибки.

99% AV - это разыменование nil, обращение к полям неинициализированого объекта. На этот случай - младшие адреса адресного пространства приложения всегда защищены от записи.

AV может возникать уже постфактум.
Вот ты говоришь - обращение по nil. А откуда nil взялся? Если баг в коде, это одно и поправимо. Но ведь порчу памяти своего же процесса система не отловит. Вдруг была перезапись, и в область данных был записан мусор? Нельзя доверять состоянию программы в этом случае. По-хорошему, даже сохранять конфиг нежелательно - он тоже м.б. битый.

Сообщение было отредактировано: 7 апр 21, 12:41
7 апр 21, 12:48    [22305363]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Fr0sT-Brutal
По-хорошему, даже сохранять конфиг нежелательно

В то же время, по-хорошему, пользователь, который полчаса вбивал данные, очень не хотел бы их потерять.
7 апр 21, 13:19    [22305378]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207

07.04.2021 13:19, softwarer пишет:
> В то же время, по-хорошему, пользователь, который полчаса вбивал данные, очень не хотел бы их потерять.

ога, при Access Violation in "ntdll.dll"

Posted via ActualForum NNTP Server 1.5

7 апр 21, 13:38    [22305393]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Maxim Rusov
Member

Откуда: Москва-Питер
Сообщений: 2483
Fr0sT-Brutal
Исключений миллион, и надо различать предусмотренные (возможные) либо нештатные.

Вот - ListIndexOutOfBounds. Оно как - предусмотренное или нештатное? Тоже программу завершать будешь?

Maxim Rusov
Нельзя доверять состоянию программы в этом случае. По-хорошему, даже сохранять конфиг нежелательно - он тоже м.б. битый.

А по факту - иногда посмотришь серверные логи, а том сотни AV. А он работает 24/7 :) Я не говорю, что это хорошо - но бывает.

Вообще, программы на Delphi довольно устойчивы к ошибкам. Чтобы она упала - это очень не повезти должно.
7 апр 21, 13:48    [22305400]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Maxim Rusov

Вот - ListIndexOutOfBounds. Оно как - предусмотренное или нештатное? Тоже программу завершать будешь?

Зависит от ситуации. Как общее правило тут уже не отрубишь сплеча.

Maxim Rusov
А по факту - иногда посмотришь серверные логи, а том сотни AV. А он работает 24/7 :) Я не говорю, что это хорошо - но бывает.

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

softwarer
Fr0sT-Brutal
По-хорошему, даже сохранять конфиг нежелательно

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

Безусловно. Поэтому надо предусмотреть и сохранять во временный файл. Потому что пользователь, наверно, очень не хотел бы вместо счета на 100 руб получить счет на 4097097287 :)

Сообщение было отредактировано: 7 апр 21, 14:22
7 апр 21, 14:29    [22305424]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
didgik
Member

Откуда:
Сообщений: 968
didgik
DBGridEh с локальной сортировкой по заголовку таблицы.
Везде работает, а в двух местах работает криво и выдает какую то чушь.
Не особо критично, но народ заметил и просил пофиксить.
Три месяца висела задача. Все в настройках одинаково, кроме запроса, а нифига не работает.
Пипец.

Оказывается в событие TitleClick вставил функцию типа grid_refresh которая помимо всего прочего переоткрывала датасет способом Close Open.
Ну вот как так то?


Вот жеж блин. По итогу оказалось, что grid_refresh в событии TitleClick очень нужная весч. И как теперь быть то?
8 апр 21, 14:32    [22305982]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12789
didgik
И как теперь быть то?
Ну как обычно - озвучить исходную задачу и свой вариант решения
8 апр 21, 14:52    [22306000]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
didgik
Member

Откуда:
Сообщений: 968
_Vasilisk_
didgik
И как теперь быть то?
Ну как обычно - озвучить исходную задачу и свой вариант решения

Есть заголовок таблицы. Некоторые заголовки столбцов работают как локальная сортировка, а первая колонка "Все" должна отмечать или сбрасывать крыжики. Работает она через запрос, соответственно после запроса на крыжики надо перечитать данные, чтоб галочки появились или пропали, перечитываю по Close - Open, но тогда сбрасывается сортирока по столбцам, так как она локальная в датасете.

К сообщению приложен файл. Размер - 77Kb
8 апр 21, 15:19    [22306015]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12789
didgik
Работает она через запрос, соответственно после запроса на крыжики надо перечитать данные
DataSet.DisableControls;
try
  BM := DataSet.GetBookmark;
  try
    DataSet.First;
    while not DataSet.Eof do begin
      DataSet.Fields[0].AsBoolean := True;
      DataSet.Next;
    end;
    DataSet.GotoBookmark(BM);
  finally
    DataSet.FreeBookmark(BM);
  end;
finally
  DataSet.EnableControls;
end;


Сообщение было отредактировано: 8 апр 21, 15:50
8 апр 21, 15:57    [22306041]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4173
госуслуги: время может отображаться со сдвигом в три часа

К сообщению приложен файл. Размер - 8Kb
12 апр 21, 13:05    [22307611]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207
JayDi
госуслуги: время может отображаться со сдвигом в три часа
координаты не меняют?
12 апр 21, 13:07    [22307614]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4173
Кстати, довольно популярная ошибка. Когда хранишь даты в московском времени, а потом появляется задача отображать всё в разных часовых поясах. А если еще и база переедет на новый сервер в другом часовом поясе... ууу... Короче, если не продумать с самого начала -- можно большой геморрой отхватить в последствие.
12 апр 21, 13:14    [22307617]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207
JayDi
Кстати, довольно популярная ошибка. Когда хранишь даты в московском времени, а потом появляется задача отображать всё в разных часовых поясах. А если еще и база переедет на новый сервер в другом часовом поясе... ууу... Короче, если не продумать с самого начала -- можно большой геморрой отхватить в последствие.
за МКАД жизни нет! ©
12 апр 21, 13:27    [22307630]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Maxim Rusov
Member

Откуда: Москва-Питер
Сообщений: 2483
Оказывается, в Delphi есть суровое ограничение - можно создать не более 1791 custom variant types. Причем - не одновременно, а вообще, инкрементально. При удалении типа - не освобождается. Казалось бы 1791 - должно хватить всем, а вот поди же ты - сегодня лимит был достигнут и сервак упал.

Самое подлое - мне то они вообще нафиг не сдались. RTL их сам создает при инициализации модулей (Data.SqlTimSt, Data.FmtBcd). Казалось бы какие проблемы - оно же singleton. Но модули в Dll-ках, а вот Dll-ки - постоянно загружаются/выгружаются...
12 апр 21, 15:55    [22307716]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
rgreat
Member

Откуда:
Сообщений: 6653
Maxim Rusov,

Как интересно... баг репорт надо.
12 апр 21, 16:04    [22307721]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Maxim Rusov
Но модули в Dll-ках, а вот Dll-ки - постоянно загружаются/выгружаются...

Зачем? Постоянно загружать/выгружать dll-ки - экстремально странное занятие, единственный результат которого - значительные потери производительности (хотя оно, конечно, такое же нелепо-популярное, как генерить интерфейс кодом в рантайме или компилить длл без рантайм-пакетов).

Перегружать dll-ки нужно только если проводить обновление версии на ходу, без перезапуска приложения.
12 апр 21, 16:26    [22307732]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Maxim Rusov
Member

Откуда: Москва-Питер
Сообщений: 2483
softwarer,

Dll-ка реализует сервис. Логично, что при остановке сервиса Dll-ка выгружается и освобождает ресурсы. Причем ресурсы - не только память, еще, например - лицензии.
12 апр 21, 16:31    [22307733]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Maxim Rusov
Dll-ка реализует сервис. Логично, что при остановке сервиса Dll-ка выгружается и освобождает ресурсы. Причем ресурсы - не только память, еще, например - лицензии.

Сервис - в смысле, виндовый или в смысле какой-то внутри своего приложения?
12 апр 21, 16:36    [22307734]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Maxim Rusov
Member

Откуда: Москва-Питер
Сообщений: 2483
softwarer,

По разному бывает, но в данном случае - сервис windows. Dll-ка - сервис, приложение - хост.
12 апр 21, 16:39    [22307735]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65410
Блог
Maxim Rusov
По разному бывает, но в данном случае - сервис windows. Dll-ка - сервис, приложение - хост.

Кто-то запускал-останавливал-запускал-останавливал сервис Windows, пока у приложения не кончились слоты под типы? Да, засада из серии "нарочно не придумаешь".

Но опять же стоит заметить, что use runtime packages на DBRtl спас бы отца русской демократии и сервак никуда бы не упал.
12 апр 21, 16:44    [22307743]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 49 50 51 52 53 54 55 56 57 [58]
Все форумы / Delphi Ответить