Adomb |
Отправлено: 30 Марта, 2019 - 08:48:52
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Над скриптом работаю давно. Ошибок не вылазит. Две недели почти круглосуточно вертится.
Переменные диалога инициализируются в функции, чтобы в начале скрипта не было простыни. Добавил одно условие связанное с флагом галки и добавил функцию где через sendgetweb ищу с php файла в сети определённое слово. Всё, при сборке началось - выскакивает out of memory. Если убираешь условие связанное с флагом галки - собирается. Возвращаешь и убираешь функцию - тоже собирается. А вместе нет. 2 дня пересматривал, анализировал скрипт. Бесполезно. В итоге на другом компе всё быстро собралось и работает без нареканий.
Компы - на одном 8 на другом 12 гигов памяти, процы интел, винда 10 установленная одновлеменно, программное наполнение одинаковое. Почему такое происходит?
UPD. Как здесь написал, вспомнил, что, давно было, собирал скрипт с textout смотреть вывод, а после textout удалял и Кибор вылетал при сборке. Возвращаешь textout на место - собирает. Удалял из папки с Кибором все файлы кроме апдейт и regs, а также папку temp - только тогда начинал собирать без textout. Сейчас сделал тоже самое и out of memory пропало, экзешник собрался. Как то замучено это.(Отредактировано автором: 30 Марта, 2019 - 09:00:21) |
|
|
Adomb |
Отправлено: 04 Апреля, 2019 - 12:30:12
|
Мастер
Покинул форум
Сообщений всего: 185
Дата рег-ции: Июль 2015
Репутация: 1
|
Могу опять услышать в ответ, что надо смотреть код. Но, может попробуем разобраться с проблемой без этого. Код больше 1000 строк, кто захочет копаться. Все действия происходят в функциях, которые вызываются если то-то то-то и это-это, в общем, в нужный момент. Начну с того - в коде могут быть ошибки. Допустим. Но какие ошибки? Точки с запятой, скобки, синтаксис (так это называется вроде) исключаем. Будем исходить из того, что таких ошибок нет. Всё проверено за 2 месяца до дыр. Так же и с объявлением переменных, с массивами и пр. Сделано всё по инструкции и каждая строчка проверена и перепроверена отдельно и в совокупе с другими. Если запустить, код работает исправно на протяжении более 2 суток, тестировался на все его возможности и успешно, без нареканий. Всё чётко, стабильно и без вываливаний. Теперь потребовалось добавить новый функции. Начинают происходить интересные вещи. Приведу пример. Есть несколько функций, которые создают файл. Мне понадобилось ещё одна.
Функция (Отобразить)CODE:function write_otadmbat()
{string gb[17];
gb[0]="@set @x=0; "+formatic(47)+"*";
gb[1]="@echo off";
gb[2]="ver |>NUL find /v "+formatic(34)+"5."+formatic(34)+" && ";
gb[3]="if "+formatic(34)+"%~1"+formatic(34)+"=="+formatic(34)+formatic(34)+" cscript.exe "+formatic(47)+formatic(47)+"nol";
gb[4]="ogo "+formatic(47)+formatic(47)+"e:jscript "+formatic(34)+"%~f0"+formatic(34)+"& exit /b";
gb[5]="chcp 1251 >nul";
gb[6]="@cd/d "+formatic(34)+"%~dp0"+formatic(34);
gb[7]="set process=HCHelper.exe";
gb[8]=":check";
gb[9]="tasklist /FI "+formatic(34)+"IMAGENAME eq %process%"+formatic(34)+" ";
gb[10]="/NH | findstr /i "+formatic(34)+"%process%"+formatic(34)+">nul";
gb[11]="if %errorLevel% == 0 goto :check";
gb[12]="start "+formatic(47)+"d "+formatic(34)+pathfolder()+formatic(34)+" HCHelper.exe";
gb[13]="del otadm.vbs /q /f";
gb[14]="exit /B";
gb[15]="*/new ActiveXObject('Shell.Application').";
gb[16]="ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);";
if(fopen (tempfolder()+"otadm.bat", "w")!=0)
{fwrite(gb[0]);fwrite(ENDL); fwrite(gb[1]);fwrite(ENDL); fwrite(gb[2]+gb[3]+gb[4]);fwrite(ENDL);
fwrite(gb[5]);fwrite(ENDL); fwrite(gb[6]);fwrite(ENDL); fwrite(gb[7]);fwrite(ENDL); fwrite(gb[8]);fwrite(ENDL);
fwrite(gb[9]+gb[10]);fwrite(ENDL); fwrite(gb[11]);fwrite(ENDL); fwrite(gb[12]);fwrite(ENDL); fwrite(gb[13]);fwrite(ENDL);
fwrite(gb[14]);fwrite(ENDL); fwrite(gb[15]+gb[16]);fwrite(ENDL);
fclose(); return 1;}
return 0;
}
Начал собирать exe - Кибор вываливается без ошибок. Убрал другую функцию создания файла - собирается. Вернул - вываливается. Разделил уже новую функцию на 2 части.
Функции (Отобразить)CODE:function write_otadmbat()
{string gb[9];
gb[0]="@set @x=0; "+formatic(47)+"*"; gb[1]="@echo off";
gb[2]="ver |>NUL find "+formatic(47)+"v "+formatic(34)+"5."+formatic(34)+" && ";
gb[3]="if "+formatic(34)+"%~1"+formatic(34)+"=="+formatic(34)+formatic(34)+" cscript.exe "+formatic(47)+formatic(47)+"nol";
gb[4]="ogo "+formatic(47)+formatic(47)+"e:jscript "+formatic(34)+"%~f0"+formatic(34)+"& exit "+formatic(47)+"b";
gb[5]="chcp 1251 >nul"; gb[6]="@cd/d "+formatic(34)+"%~dp0"+formatic(34); gb[7]="set process=HCHelper.exe"; gb[8]=":check";
if(fopen (patht+"otadm.bat", "w")!=0)
{fwrite(gb[0]); fwrite(ENDL); fwrite(gb[1]);fwrite(ENDL); fwrite(gb[2]); fwrite(gb[3]); fwrite(gb[4]);fwrite(ENDL);
fwrite(gb[5]);fwrite(ENDL); fwrite(gb[6]);fwrite(ENDL); fwrite(gb[7]);fwrite(ENDL); fwrite(gb[8]);fwrite(ENDL);
fclose(); return 1;}
return 0;
}
function write_otadmbat2()
{string gb[8];
gb[0]="tasklist /FI "+formatic(34)+"IMAGENAME eq %process%"+formatic(34)+" "; gb[1]="/NH | findstr /i "+formatic(34)+"%process%"+formatic(34)+">nul";
gb[2]="if %errorLevel% == 0 goto :check"; gb[3]="start /d "+formatic(34)+pathfolder()+formatic(34)+" HCHelper.exe";
gb[4]="del otadm.vbs /q /f"; gb[5]="exit /B"; gb[6]="*/new ActiveXObject('Shell.Application')."; gb[7]="ShellExecute (WScript.ScriptFullName,'Admin','','runas',1);";
if(fopen (patht+"otadm.bat", "a")!=0)
{fwrite(gb[0]); fwrite(gb[1]);fwrite(ENDL); fwrite(gb[2]);fwrite(ENDL); fwrite(gb[3]);fwrite(ENDL); fwrite(gb[4]);fwrite(ENDL);
fwrite(gb[5]);fwrite(ENDL); fwrite(gb[6]); fwrite(gb[7]);fwrite(ENDL); fclose(); return 1;}
return 0;
}
Только тогда экзешник собрался.
Дальше. Добавляю функцию которая принимает int, 3 штуки. Кибор вываливается (буду писать без "при сборе exe" и так понятно). Оставляю функцию пустой, приёмники int не убираю. Вываливается. Убираю приёмники. Собирается. Возвращаю int`ы, убираю из других функций приёмные int. Собирается. Причём, как в сообщающихся сосудах, одну штуку выше убрал, даёт собрать с одним приёмным int, ещё убрал , можно добавить второй. Пересмотрел весь код, нашёл приёмные инты которые принимали переменные глобальные. Вместо приёма переменных можно было сразу использовать глобальные переменные в функции. Зачем я так делал непонятно, но поправил, больше так делать не буду. После этого exe собрался с новой функцией. Дальше. Добавляю следующую функцию. Опять не собирается. Убрал external из основного кода в функции, где он нужен. Начал собираться. По прошествии времени опять добавляю пару функций - не собирается. Ну приплыли уже. Убрал блок ресурсов. Всё начало собираться замечательно, в том смысле, что очень быстро, за 15 секунд. Дописал код, без ресурсов запускается быстро и работает, экзешник собирается быстро. Добавляю обратно ресурсы (общий вес 600 кб, две базы, три bmp и три батника) - вылетает, хоть убей. В настройках выставил 1,5 гига памяти - exe в итоге начал собираться, но очень долго, минут по 20.
С учётом всего вышеописанного - это же ненормально, получается. И как побеждать?(Отредактировано автором: 04 Апреля, 2019 - 12:49:43) |
|
|
|