ConEmu / old-issues

Old issues for ConEmu project (import is pending)
http://conemu.github.io/
0 stars 1 forks source link

Сбой при запуске плагина Visual Compare 0.9.8 под NSIS 2.46 через враппер версии 1.9 #394

Closed ConEmu closed 9 years ago

ConEmu commented 9 years ago

From victo...@mail333.com on May 20, 2011 11:57:04

Что имеет место: при запуске одинакового набора Far 3.0.2036/2038/2040 имеем различное поведение в разных условиях.

1) Запускаем пакет Far 2.0.2036 и в меню конфигурации плагинов видим запись \VisComp.dll. Никакие настройки эту визуальную ошибку тут не убирают, только установка Far 3.0.2038;

2) Far 3.0.2038/3.0.2040 - вот тут самое интересное и начинается: если запустить Far из командной строки командой start far то всё стартует без ошибок, а вот если запустить его же из собранной по приложенному скрипту портативной версии то тут при запуске мы имеем нарушение защиты памяти (код исключения 0хС0000005) при обращении по адресу 0х00000011 в самом Far.exe. Вероятно это ошибка NSIS плагина который каким-то образом портит память запускаемого процесса, но я пока не представляю как этот факт проверить и прошу помощи в анализе и устранении данного явления.

Что приложено: сам скрипт которым всё собирается, INI файлы для использованных Far2 плагинов - родные опять либо не работают, либо при запуске/вызове Far валят. А потому приходится выкручиваться через враппер.

Attachment: far3.0-portable-sdk.tgz ini.7z

Original issue: http://code.google.com/p/conemu-maximus5/issues/detail?id=394

ConEmu commented 9 years ago

From victo...@mail333.com on May 20, 2011 12:56:58

Проверил своё предположение, что сбой вызывается NSIS заменой вызова ExecWait в скрипте на вызовы ExecDos::Exec, ExecCmd::Exec - явление устойчиво воспроизвелось, и посыпались в отладчик с той же причиной - чтение по недопустимому адресу памяти, Такое ощущение, что при инициализации плагина кто-то портит стек процесса - NSIS его использует, но думаю что это вряд ли его работа... В общем пока ничего понять не могу...:(

Attachment: 1.png

ConEmu commented 9 years ago

From ConEmu.M...@gmail.com on May 21, 2011 03:28:02

Не повторяется

Status: Invalid

ConEmu commented 9 years ago

From victo...@mail333.com on May 21, 2011 07:30:01

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

ConEmu commented 9 years ago

From victo...@mail333.com on May 21, 2011 12:07:56

Тут одна гипотеза мне в голову пришла после слов коллеги:

"я так понимаю, речь про инсталлятор? я тебе забыл написать еще в том году, что у NSIS'ьки есть один серьезный баг, которой ведет к повреждению памяти, а если учесть, что последняя версия данного инструмента вышла аж в 2009, кажись, то странно то, что в Nullsoft'е, будучи оповещенные о баге, никто ничего так и не предпринял!!! это наводит на размышления о сообразности его дальнейшего использования (именно поэтому я перешен на WiX). впрочем, утверждать однозначно, что все дело в баге NSIS я не берусь. мало ли чего."

плагин судя по всему зависает на запуске - в верхней строке меню по F11 видна запись "\VisComp.dl_" и этим всё заканчивается. А может попробовать его перезагрузить средствами самого far? Если рестартнётся нормально, то можно считать гипотезу о влиянии NSIS доказанной в первом приближении, если нет, тогда придётся искать иное решение. Но пересобрать его с новыми хидерами от 2.0.1807 я попробую - может и это решит проблему?

ConEmu commented 9 years ago

From victo...@mail333.com on May 25, 2011 11:30:37

Ввсё, судя по опытам, найден истинный виновник проблемы - плагин Advanced Compare 3.0 build 32 Copyright (C) 2006-2011 Alexey Samlyukov - именно его удаление из тестовой кучи снимает проблему полностью.:( Сначала ловил тестовыми сборками, надоело, собрал простой лаунчер и им руками удаляя БД plugincache.* точно установил - если именно данный плагин убрать, то явление более не воспроизводится, конфликт вызывает именно сам факт наличия в тестируемом наборе AdvCmp.dll. Судя по всему она как-то портит память при запуске из под NSIS 2.46, про наличие в нём ошибки св работе с памятью я точно знаю. И не только со слов наших коллег, но и сам не раз это видел будучи вынужден например применять в скриптах не стандартные приёмы для определения языка локали - штатные методы не всегда срабатывают, и часто приходится использовать например такой приём:

var $lng

Function .onInit

....

StrCpy $lng $LANGUAGE

.... FunctionEnd Section -main StrCmp $lng 1049 lbl1 lbl2 .... SectionEnd

Не будь с NSIS таких заморочек (Нульсофтовцы на баг-репорты о них уже годы ноль внимания) многое не пришлось бы писать через пляски с бубном.

На всякий случа - вдруг где пригодится, кто из нас знает когда он может потребоваться? я кладу сюда как сам лаунчер, так и его исходники. Мне с ним потребовалось полчаса для локализации ошибки, а до того сколько мы с ней воевали? Как минимум неделю она всем нервы трепала и никто не мог понять в чём дело. Я зря думал на враппер и спасибо за подсказку что враппер по идее не может вызывать таких явлений - иначе бы я не известно сколько времени потратил на эту тупиковую гипотезу, а на этот плагин у меня и подозрения даже не было - он вроде и не сбоил, и работал честно и быстро а потому был вне подозрений. Под подозрение попадали другие - и MBlockEditor, и DialogTools? но они как быстро выяснилось не имеют никакого отношения к причинам явления, а этот попался когда остался одним единственным Far 3 плагином эксперименте - в паре были только два плагина - VisualCompare и Advanced Compare. Удаление последнего решило проблему, и как выяснилось он похоже сбоит не только VisualCompare, но и с другими плагинами "не сильно дружит".

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

Attachment: launcher.7z