[wlx] HTMLView - обсуждение
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
В D2 тоже (во всяком случае, Гислер не раз говорил о собственных модификациях стандартных модулей), поэтому думаю именно на компилятор.
Короче, я не знаю, в чём проблема, решается ли она, если решается — то как именно, и почему Гислер это решение не может применить. Все вопросы и советы к нему, гадать на кофейной гуще тут бессмысленно. Пока что факты таковы, что в Тотале эта проблема имеется.
Короче, я не знаю, в чём проблема, решается ли она, если решается — то как именно, и почему Гислер это решение не может применить. Все вопросы и советы к нему, гадать на кофейной гуще тут бессмысленно. Пока что факты таковы, что в Тотале эта проблема имеется.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Похоже без бинарного патча здесь не обойтись, для примеру в архиве две версии тотала одна оригинальная, а в другой отключены все исключения сопроцессора и плагин который вызывает деление на ноль. В оригинальной версии выскакивает ошибка, а в модифицированном все работает. Для проверки достаточно нажать f3 на любом файле остальное уже настроено. Конечно патчить exe это не дело, лучше пропатчить delphi runtime и послать автору. В Lazarus все тоже самое, по крайней мере если смотреть последнюю бету то там исключения сопроцессора тоже включены, патчить не стал т.к у тотала есть контроль целостности exe, а для 8 версии x64 готового способа его отключить под рукой нет.
http://rghost.net/private/27013491/a1ae ... 29ea73dbde
http://rghost.net/private/27013491/a1ae ... 29ea73dbde
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Сам хотел бы знать. Судя по стеку, движок MSHTML через неё работает, но нафига — ума не приложу.Alextp писал(а):А какое отношение к этому имеет D3D..
arax
Так проблема как раз в 64-битной версии и возникает, в 32-битной не проявляется.
М-да, перечитал сейчас ветку, понял, что всё запутал. Тут речь шла одновременно о двух вещах: об исторической проблеме в Дельфях и о текущей проблеме в Лазарусе. Все мои слова о проблематичных отключениях относились к Дельфи. Гислер долго воевал с этой пакостью, и только в 7.50, кажется, поотключал нужные опции в основных местах, так что теперь подобных падений намного меньше. А с HTMLView падает уже 64-битка, сделанная в Лазарусе. Я предположил, что это схожая проблема. Хоть Гислер утверждает, что Лазарус ей не подвержен, но раз на практике наблюдаем иное…
Остаётся дождаться от Гислера тестовой версии, где вставлен вызов отрубания исключений перед нужным DispatchMessage, проверю — станет ясно, в нём причина или нет. Заодно тогда и спрошу у него, почему вообще так происходит, раз Лазарус не должен страдать этой проблемой.
Почему же, ё-моё, ты нигде не пишешь "ё"?
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Гислер ответил мне, что он попробовал вставить вызовы ClearX87ControlWord перед каждым DispatchMessage, но это не помогло. Исключение всё-таки выскакивает, хотя отладчик Лазаруса делает невинные глазки и показывает, что этот класс исключений замаскирован (причём даже на момент возникновения самого исключения).
Собственно падение происходит при обработке нестандартного сообщения с кодом 0x8002; насколько удалось нагуглить, это какое-то сообщение, специфичное для контрола (все коды сообщений выше 8000 используются для личных целей приложений). Единственное предположение, что событие происходит в другом потоке, т.к. маска выставляется для каждого потока независимо, но это я ещё проверю на отладке. А пока ни у него, ни у меня идей больше нет.
Собственно падение происходит при обработке нестандартного сообщения с кодом 0x8002; насколько удалось нагуглить, это какое-то сообщение, специфичное для контрола (все коды сообщений выше 8000 используются для личных целей приложений). Единственное предположение, что событие происходит в другом потоке, т.к. маска выставляется для каждого потока независимо, но это я ещё проверю на отладке. А пока ни у него, ни у меня идей больше нет.
Почему же, ё-моё, ты нигде не пишешь "ё"?
ЗаменитьCaptainFlint писал(а):А пока ни у него, ни у меня идей больше нет.
\lazarus\fpc\2.4.4\units\x86_64-win64\rtl\system.o
содержимым архива
http://rghost.net/27283781
и пересобрать тотал
Это пропатченный runtime от fpc 2.4.4, если используется другая версия компилятора то нужно сказать мне ее.
В этой версии по умолчанию отключены все исключения сопроцессора и sse, кстати именно из за последнего и могла быть проблема так как они маскируются не так как исключения сопроцессора.
В тестовом приложении у меня с этой версией никаких исключений не возникает.
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
arax
Спасибо за наводку, дело оказалось в том, что это именно SSE-исключение, Гислер его просто не маскировал. И ведь хотел я сразу же посмотреть, к какой категории относится инструкция, но вылетело из головы. В общем, Гислер попробовал замаскировать SSE-исключения в самом начале программы, и всё заработало; патч не потребовался. Исправление войдёт в следующую бету.
Кстати, возникает вопрос, как лучше поступать с обычными исключениями плавающей точки. Сейчас Гислер их выключает перед каждым вызовом OLE-функций и включает после них. Можно их тоже выключить в самом начале раз и навсегда, но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами.
Спасибо за наводку, дело оказалось в том, что это именно SSE-исключение, Гислер его просто не маскировал. И ведь хотел я сразу же посмотреть, к какой категории относится инструкция, но вылетело из головы. В общем, Гислер попробовал замаскировать SSE-исключения в самом начале программы, и всё заработало; патч не потребовался. Исправление войдёт в следующую бету.
Кстати, возникает вопрос, как лучше поступать с обычными исключениями плавающей точки. Сейчас Гислер их выключает перед каждым вызовом OLE-функций и включает после них. Можно их тоже выключить в самом начале раз и навсегда, но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами.
Почему же, ё-моё, ты нигде не пишешь "ё"?
А зачем это вообще нужно?CaptainFlint писал(а):но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами
Я еще понимаю на этапе отладки, но использовать нестандартный подход к исключениям в приложении которое задействует внешние библиотеки, исключения сопроцессора в большинстве случаев не обрабатывающие, нельзя.
А попытка исправить это вставляя отключение исключений перед каждым вызовом усложнит код, к тому же какая гарантия что учтены все места где это нужно.
Кстати неплохо было бы разобраться и с 32 битной версией, в ней все эти проблемы тоже присутствуют.
Предположим у нас есть testdll.dll исходников которой нет, о исключениях она ничего не знает и которую мы хотим использовать в плагине.
В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку.
Вот пример
http://rghost.net/27359661
Открываем lister и при попытке изменить размер окна он вылетает по Invalid Floating Point Operation, исходники модулей на purebasic в комплекте.
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Например, ловить случайные баги в Тотале. Например, из-за неправильной обработки у тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение. Он зарепортит — Гислер поправит, все выиграют.arax писал(а):А зачем это вообще нужно?
Не уверен, что он захочет для исправления такого рода проблем использовать патченый компилятор и/или System… А другого способа я не вижу.arax писал(а):В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку.
Почему же, ё-моё, ты нигде не пишешь "ё"?
CaptainFlint
Сильно сомнительно что тотал широко использует вычисления с плавающей точкой(а он их вообще использует?).
не
Сильно сомнительно что тотал широко использует вычисления с плавающей точкой(а он их вообще использует?).
Тут скорее, у тысяч пользователей будут выскакивать исключения во внешних модулях при использовании плагинов, а Гислеру тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение.
не
Учитывая что для этого нужно только поправить одну константу (0x1332->0x133f), это крайне печально.захочет для исправления такого рода проблем использовать патченый компилятор и/или System…
-
dikinsonik
- Сообщения: 13
- Зарегистрирован: Вт авг 22, 2006 00:28
- Моторокер
- Сообщения: 1517
- Зарегистрирован: Пт май 06, 2005 08:22
- Откуда: г. Пермь (читается Перьмь)
- Контактная информация:
В чём прикол? Почему нельзя на весь экран развернуть?
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
ПармаСруб - строительство домов и бань в Перми
Читаем здесь. Прикол в допиливании плагина до уровня лёгкого браузера (с адресной строкой, тулбаром (не только в режиме оконного просмотра), строкой состояния).
И написано "нажал кнопку". А это как минимум можно сделать только с помощью внешней тулзы типа TCFS2 или скрипта.
И написано "нажал кнопку". А это как минимум можно сделать только с помощью внешней тулзы типа TCFS2 или скрипта.
На сайте автора появилась версия 1.2.6:
http://sites.google.com/site/htmlview/
Теперь доступна 64-битная сборка. Также добавлена функция подсветки всех найденных строк при поиске (отключено по-умолчанию, включается ключом HighlightAllMatches).
Автоматическая установка перезаписывает ini-файл, будьте внимательны.
http://sites.google.com/site/htmlview/
Теперь доступна 64-битная сборка. Также добавлена функция подсветки всех найденных строк при поиске (отключено по-умолчанию, включается ключом HighlightAllMatches).
Автоматическая установка перезаписывает ini-файл, будьте внимательны.
Багрепорт!
При попытке просмотреть листером данный файл
http://rghost.ru/41419381 (обычный mht, подобных можно насохранять ие или оперой)
вываливается вот такая ошибка

TC 8.01 x64 @ Win8 x64.
p.s.
При прочих равных на Win7 х64 всё работает нормально.
При попытке просмотреть листером данный файл
http://rghost.ru/41419381 (обычный mht, подобных можно насохранять ие или оперой)
вываливается вот такая ошибка

TC 8.01 x64 @ Win8 x64.
p.s.
При прочих равных на Win7 х64 всё работает нормально.