View previous topic :: View next topic |
Author |
Message |
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Mon Oct 24, 2011 22:51 Post subject: |
|
|
В D2 тоже (во всяком случае, Гислер не раз говорил о собственных модификациях стандартных модулей), поэтому думаю именно на компилятор.
Короче, я не знаю, в чём проблема, решается ли она, если решается — то как именно, и почему Гислер это решение не может применить. Все вопросы и советы к нему, гадать на кофейной гуще тут бессмысленно. Пока что факты таковы, что в Тотале эта проблема имеется. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
Alextp
Joined: 06 Feb 2005 Posts: 4957
|
|
Back to top |
|
|
arax
Joined: 20 Jan 2011 Posts: 260 Location: Новгород
|
(Separately) Posted: Mon Oct 24, 2011 23:26 Post subject: |
|
|
Похоже без бинарного патча здесь не обойтись, для примеру в архиве две версии тотала одна оригинальная, а в другой отключены все исключения сопроцессора и плагин который вызывает деление на ноль. В оригинальной версии выскакивает ошибка, а в модифицированном все работает. Для проверки достаточно нажать f3 на любом файле остальное уже настроено. Конечно патчить exe это не дело, лучше пропатчить delphi runtime и послать автору. В Lazarus все тоже самое, по крайней мере если смотреть последнюю бету то там исключения сопроцессора тоже включены, патчить не стал т.к у тотала есть контроль целостности exe, а для 8 версии x64 готового способа его отключить под рукой нет.
http://rghost.net/private/27013491/a1aef3c065551910d56b3b29ea73dbde |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Tue Oct 25, 2011 10:36 Post subject: |
|
|
Alextp wrote: | А какое отношение к этому имеет D3D.. |
Сам хотел бы знать. Судя по стеку, движок MSHTML через неё работает, но нафига — ума не приложу.
arax
Так проблема как раз в 64-битной версии и возникает, в 32-битной не проявляется.
М-да, перечитал сейчас ветку, понял, что всё запутал. Тут речь шла одновременно о двух вещах: об исторической проблеме в Дельфях и о текущей проблеме в Лазарусе. Все мои слова о проблематичных отключениях относились к Дельфи. Гислер долго воевал с этой пакостью, и только в 7.50, кажется, поотключал нужные опции в основных местах, так что теперь подобных падений намного меньше. А с HTMLView падает уже 64-битка, сделанная в Лазарусе. Я предположил, что это схожая проблема. Хоть Гислер утверждает, что Лазарус ей не подвержен, но раз на практике наблюдаем иное…
Остаётся дождаться от Гислера тестовой версии, где вставлен вызов отрубания исключений перед нужным DispatchMessage, проверю — станет ясно, в нём причина или нет. Заодно тогда и спрошу у него, почему вообще так происходит, раз Лазарус не должен страдать этой проблемой. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Wed Oct 26, 2011 16:27 Post subject: |
|
|
Гислер ответил мне, что он попробовал вставить вызовы ClearX87ControlWord перед каждым DispatchMessage, но это не помогло. Исключение всё-таки выскакивает, хотя отладчик Лазаруса делает невинные глазки и показывает, что этот класс исключений замаскирован (причём даже на момент возникновения самого исключения).
Собственно падение происходит при обработке нестандартного сообщения с кодом 0x8002; насколько удалось нагуглить, это какое-то сообщение, специфичное для контрола (все коды сообщений выше 8000 используются для личных целей приложений). Единственное предположение, что событие происходит в другом потоке, т.к. маска выставляется для каждого потока независимо, но это я ещё проверю на отладке. А пока ни у него, ни у меня идей больше нет. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
arax
Joined: 20 Jan 2011 Posts: 260 Location: Новгород
|
(Separately) Posted: Wed Oct 26, 2011 22:06 Post subject: |
|
|
CaptainFlint wrote: | А пока ни у него, ни у меня идей больше нет. |
Заменить
\lazarus\fpc\2.4.4\units\x86_64-win64\rtl\system.o
содержимым архива
http://rghost.net/27283781
и пересобрать тотал
Это пропатченный runtime от fpc 2.4.4, если используется другая версия компилятора то нужно сказать мне ее.
В этой версии по умолчанию отключены все исключения сопроцессора и sse, кстати именно из за последнего и могла быть проблема так как они маскируются не так как исключения сопроцессора.
В тестовом приложении у меня с этой версией никаких исключений не возникает. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Thu Oct 27, 2011 14:26 Post subject: |
|
|
arax
Спасибо за наводку, дело оказалось в том, что это именно SSE-исключение, Гислер его просто не маскировал. И ведь хотел я сразу же посмотреть, к какой категории относится инструкция, но вылетело из головы. В общем, Гислер попробовал замаскировать SSE-исключения в самом начале программы, и всё заработало; патч не потребовался. Исправление войдёт в следующую бету.
Кстати, возникает вопрос, как лучше поступать с обычными исключениями плавающей точки. Сейчас Гислер их выключает перед каждым вызовом OLE-функций и включает после них. Можно их тоже выключить в самом начале раз и навсегда, но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
arax
Joined: 20 Jan 2011 Posts: 260 Location: Новгород
|
(Separately) Posted: Thu Oct 27, 2011 15:50 Post subject: |
|
|
CaptainFlint wrote: | но тогда Лазарус не сможет обнаруживать ошибки в работе с плавающими числами |
А зачем это вообще нужно?
Я еще понимаю на этапе отладки, но использовать нестандартный подход к исключениям в приложении которое задействует внешние библиотеки, исключения сопроцессора в большинстве случаев не обрабатывающие, нельзя.
А попытка исправить это вставляя отключение исключений перед каждым вызовом усложнит код, к тому же какая гарантия что учтены все места где это нужно.
Кстати неплохо было бы разобраться и с 32 битной версией, в ней все эти проблемы тоже присутствуют.
Предположим у нас есть testdll.dll исходников которой нет, о исключениях она ничего не знает и которую мы хотим использовать в плагине.
В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку.
Вот пример
http://rghost.net/27359661
Открываем lister и при попытке изменить размер окна он вылетает по Invalid Floating Point Operation, исходники модулей на purebasic в комплекте. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Thu Oct 27, 2011 16:38 Post subject: |
|
|
arax wrote: | А зачем это вообще нужно? |
Например, ловить случайные баги в Тотале. Например, из-за неправильной обработки у тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение. Он зарепортит — Гислер поправит, все выиграют.
arax wrote: | В плагине при загрузке этой dll мы отключаем исключения, однако потом delphi их снова включает и мы получаем ошибку. |
Не уверен, что он захочет для исправления такого рода проблем использовать патченый компилятор и/или System… А другого способа я не вижу. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
arax
Joined: 20 Jan 2011 Posts: 260 Location: Новгород
|
(Separately) Posted: Thu Oct 27, 2011 17:20 Post subject: |
|
|
CaptainFlint
Сильно сомнительно что тотал широко использует вычисления с плавающей точкой(а он их вообще использует?).
Quote: | у тысячи пользователей просто выведется некорректное число, а у тысяча первого вылетит исключение. |
Тут скорее, у тысяч пользователей будут выскакивать исключения во внешних модулях при использовании плагинов, а Гислер
не Quote: | захочет для исправления такого рода проблем использовать патченый компилятор и/или System… |
Учитывая что для этого нужно только поправить одну константу (0x1332->0x133f), это крайне печально. |
|
Back to top |
|
|
dikinsonik
Joined: 22 Aug 2006 Posts: 13
|
(Separately) Posted: Tue Dec 13, 2011 18:07 Post subject: |
|
|
Подскажите,реально сделать в TC, открывать браузер IE9,нажал кнопку - и браузер открылся на ширину двух панелей - для работы в нете...
Что бы было вот так вот
|
|
Back to top |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Fri Dec 16, 2011 23:03 Post subject: |
|
|
В чём прикол? Почему нельзя на весь экран развернуть? _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 16, 2011 23:10 Post subject: |
|
|
Читаем здесь. Прикол в допиливании плагина до уровня лёгкого браузера (с адресной строкой, тулбаром (не только в режиме оконного просмотра), строкой состояния).
И написано "нажал кнопку". А это как минимум можно сделать только с помощью внешней тулзы типа TCFS2 или скрипта. |
|
Back to top |
|
|
fa1con
Joined: 19 Aug 2006 Posts: 162
|
(Separately) Posted: Mon Dec 19, 2011 14:17 Post subject: |
|
|
На сайте автора появилась версия 1.2.6:
http://sites.google.com/site/htmlview/
Теперь доступна 64-битная сборка. Также добавлена функция подсветки всех найденных строк при поиске (отключено по-умолчанию, включается ключом HighlightAllMatches).
Автоматическая установка перезаписывает ini-файл, будьте внимательны. |
|
Back to top |
|
|
Mellomann
Joined: 07 Sep 2009 Posts: 708
|
(Separately) Posted: Thu Nov 08, 2012 02:07 Post subject: |
|
|
Багрепорт!
При попытке просмотреть листером данный файл
http://rghost.ru/41419381 (обычный mht, подобных можно насохранять ие или оперой)
вываливается вот такая ошибка
TC 8.01 x64 @ Win8 x64.
p.s.
При прочих равных на Win7 х64 всё работает нормально. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|