AIMP Forum

AIMP for Windows => Ошибки и замечания / Bugs => Skin Editor, Skin Engine => Обработано / Processed => Topic started by: Killy on September 28, 2018, 02:56:38

Title: [-] [1042][2080] Can't load skin: Duplicates not allowed
Post by: Killy on September 28, 2018, 02:56:38
"Обожаю" такие ошибки. "Something went wrong" и поди догадайся что именно, когда разработчик не потрудился вывести хоть какой-то идентификатор - что именно не понравилось.

Что там за дубликат появился с момента последней успешной сборки - не могу понять. Вроде только пиксели двигал.
Title: Re: [1042][2080] Can't load skin: Duplicates not allowed
Post by: Killy on September 28, 2018, 03:54:11
Просто закрыть редактор и открыть проект снова один раз не помогало. Применить другой скин в плеере, потом снова этот - не помогало.

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

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

Претензия к бестолковому сообщению об ошибке, тем не менее, остаётся. Предлагаю добавить в него "Счастливой отладки!"
Title: Re: [1042][2080] Can't load skin: Duplicates not allowed
Post by: Artem on September 28, 2018, 20:40:20
Ну и к чему это все написано? Вы хоть бы скопилированную версию проблемного скина дали... Это сообщение не мое, поэтому оно и неинформативно, а откуда оно вылезло - я беспонятия, нужен проблемный скин.
Title: Re: [-] [1042][2080] Can't load skin: Duplicates not allowed
Post by: Killy on September 28, 2018, 22:28:34
Я же написал, что проблема, очевидно, не в скине. Проблемного скина просто НЕТУ и НЕ БЫЛО.
Если не вы написали Skin Engine, то кто?

Поиск по исходникам на вхождение фразы "Duplicates not allowed" --> добавить в вывод идентификаторы, которые стриггерили его срабатывание - это то, о чём я здесь прошу.


Теоретически, я могу ещё раз нарваться на повреждение памяти плеера. Что делать в таком случае - не понятно.
Title: Re: [-] [1042][2080] Can't load skin: Duplicates not allowed
Post by: Artem on September 28, 2018, 22:46:27
Мда... я понял, вам помощь не нужна, вам просто поорать. Это сообщение класса Dictionary, их у меня сотни, если не тысячи. Какой из них и где упал - никто уже не знает. Что значит не было проблемного скина? А кто ж тогда ошибку выдал?
Title: Re: [-] [1042][2080] Can't load skin: Duplicates not allowed
Post by: Killy on September 29, 2018, 00:38:20
Когда возникла ошибка, я сделал копию файла проекта, чтобы на ней можно было методом исключения найти проблемный объект. Также переименовал bak-файл и проверил его тоже.
Проект и две копии генерировали одинаковую ошибку при запуске в плеере. Дальше я стал удалять куски из копии проекта и проверять на работоспособность. Это продолжалось до тех пор пока плеер просто не упал. (Я перезапускал редактор несколько раз, но про сам плеер не подумал, и он продолжал играть всё это время.)
После перезапуска плеера первая же проверка была успешной - порезанный скин открылся в плеере.
После этого я открыл копию проекта заново (сбрасывая несохранённые изменения) и проверил - скин собрался и открылся. Также открылись скины собранные из других копий проекта.

Таким образом, все копии проекта и собираемые скины были нормальными всё это время.
При этом, сам плеер (1) до падения не мог открыть уже сильно порезанный скин, и (2) вообще упал, как сам факт.
И, повторюсь, проблема возникла когда я не добавлял и не переименовывал объекты.


> Какой из них и где упал - никто уже не знает.
Я привык к языкам, которые даже в релизной сборке могут выдать понятный стек-трейс. Не знаю как с этим в делфях.

> Это сообщение класса Dictionary, их у меня сотни, если не тысячи.
Мои поздравления. Печально что стандартное сообщение не включает значение ключа.
Вообще говоря, согласно принципу "не доверяй входным данным", можно начать с тех мест, на которые может повлиять автор скина. Но, учитывая природу моей ошибки, не уверен, что было бы 100% попадание.
Должно быть тривиально сделать безопасную обёртку вроде TryAdd(), которую можно применить хоть автозаменой и которая будет возвращать что-то более разумное в случае проблемы. Нужно только смотреть, может ли это повлиять на производительность.
Title: Re: [-] [1042][2080] Can't load skin: Duplicates not allowed
Post by: Artem on September 29, 2018, 00:47:37
Stacktrace для релиза отключен. TryAdd? Серьезно? Это исключение показатель того, что что-то где-то пошло не так, причем довольно сильно не так. Видимо, вы сделали что-то такое, что я не учел, ибо для других типов ошибок есть и расширенная инфа и защита. А может это просто банальный баг в коде. Короче говоря, нужно было забэкапить скопиленный файл, на котором все падало и выложить здесь. Все остальная писанина - пустое сотрясание воздуха.
Title: Re: [1082][2161] Duplicates not allowed
Post by: 124248 on December 24, 2019, 13:04:25
нужно было забэкапить скопиленный файл, на котором все падало и выложить здесь
Есть такой файл, если нужно.