Автор Тема: Как обойти ограничение размера переменной 32767 ?  (Прочитано 1863 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо всем за предложения. Попробую ответить, так как проблема остаётся.
- Текстовых переменных, которые изменяют своё значение нет, только в массивах (про массивы далее).
- Скрипт запускает две программы для непрерывного теста сетевого адаптера и специальной аудио карты.
  После каждого цикла читает логи одной программы (постоянный размер 1 кв) и создаёт лог (тоже около 1 кв) другой програмы через StdoutRead.
  Логи обрабатываются, используя массивы, и переменовываютя. После нажатия горячей кнопки, все логи обрабатываются, создаётся график и файл CSV.
  Поэтому предложение остановить и перезапустить не подходит. График будет не полным. Это костыль! Я хочу понять проблему.
- Все массивы перезаписываются в последующим цикле, и не растут в размере (насколько я смог проверить!)
- Заменил версию 3.3.15-Beta на 3.3.14.3-Releaced
- в конце каждого цикла запускаю _WinApi_EmptyWorkingSet
- скрипт в памяти занимает 7-8Мв, в системе свободно 1.2Gb Ram

После 41 часа работы и счётчика циклов = 27000+, скрипт перестал распознавать данные логов первой програмы, и стал писать пустые логи второй программы  :(
По нажатии на горячую кнопку, вылетел с ошибкой "aut2exe has stopped working" !  :( :( :(
Это моя первая програма, которая должна бежать такое продолжительное время. Autoit вообще предназначен для такой работы?!
Что участники форума думают об этом? И какие будут предложения?
Спасибо.

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #15 Отправлен: Март 07, 2018, 21:56:47 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2808
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
нужно начать логирование в то время, когда скрипт перестает распознавать данные и писать пустые логи.
я так понимаю, что программы 1 и 2 это сторонние. на AutoIt написан только обсуждаемый скрипт?
уже было предложено выложить скрипт для обозрения. 2000 строк не так много .
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Да, программы 1 и 2 сторонние.
Что подразумевается под логированием? Писать в файл значения переменных? Или что-то другое? Или есть какие то инструменты?
Что подразумевается под "начать логирование в то время..." ? Т.е. по горячей клавише ? Или опять таки запускается какой-то инструмент?
По горячей клавише, когда уже появилась проблема, я думаю не получиться, так как логика программы уже не работает.
Да и на работе я не все 24 часа  :) А я так понимаю, что после нескольких часов такой некорректной работы и происходит вылет с ошибкой "Allocation memory error".
Есть ли какая нибудь программа для проверки логических ошибок кода ?
Может ли мне помочь Au3Striper ?
Код программы выложу в крайнем случае....
Спасибо за помощь!

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2808
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
liond66
работают функции в твоем коде по сбору и обработке инфы. тут все две тыщи строк и не нужно проверять. а только проверка в этих функциях. возможно, что и правда идет набора данных такого объема, что код крашится. если при нажатии горячей клавиши, то поиск сужается. можешь выложить этот кусок кода с пояснениями. возможно, найдется причина.
кстати, Allocation memory error может вызывать и api-функции, если они некорректно завершены.
плюс к этому, нужно описывать ошибки в коде. к примеру, функция не отработала, значит продолжения не должно быть. если не учтена ошибка в ключевом действии, то в итоге можно получить то, что ты получаешь

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #18 Отправлен: Март 08, 2018, 20:52:29 »

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
нужно начать логирование в то время, когда скрипт перестает распознавать данные и писать пустые логи.
Как начать логирование в процессе работы программы?

API и DLL функции не использую.

Если при анализе лога не находится нужное значение, функция считает попытку неудачной, отмечает в соответствующем счётчике и заходит на новый цикл.
Падать не должно. А в результате скрипт терпит крах!
В том единственном случае, когда я увидел начало проблемы, всё началось с пустого лога после
Run->ProcessWaitClose-> StdoutRead в файл.
Наверно эту часть в первую очередь я и выложу на форум.
Пока пытаюсь с Вашей помощью осмыслить проблему.
Спасибо.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3975
  • Репутация: 1056
    • Награды
  • Версия AutoIt: 3.3.14.0
liond66  [?]
Цитировать
API и DLL функции не использую
А как же это?
Цитировать
в конце каждого цикла запускаю _WinApi_EmptyWorkingSet
Кстати, ознакомьтесь с особенностями работы этой функции: Ответ #6

Цитировать
вылетел с ошибкой "aut2exe has stopped working"
Какое отношение имеет aut2exe к выполнению скрипта? Вы там динамической компиляцией балуетесь? ;)

Цитировать
создаётся график
Какими средствами? Убедитесь, что все графические объекты удалены после использования.

Цитировать
Логи обрабатываются
Проверьте закрытие всех файлов после обработки.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI

_WinApi_EmptyWorkingSet был добавлен в последние дни в попытке решить проблему.

Какое отношение имеет aut2exe к выполнению скрипта?

Мне кажется (сейчас проверить не могу), что в Task Manager Windows 10 кроме названия скрипта в отдельном столбике значится имя компилятора aut2exe. Видимо это имя и появляется в сообщении об ошибке. Или он вшит в скомпилированном файле...

Вы там динамической компиляцией балуетесь? ;)

Надеюсь, что нет  :). Я не знаю как это...
График создаётся позже, до этого дело не доходит.
Все файлы закрываю. Перед закрытием добавил на всякий случай FileFlush.

OffTopicНе могу найти кнопку "Вставить ник". Написал вручную.

Оффлайн Prog [?]

  • Осваивающий
  • **
  • Сообщений: 297
  • Репутация: 30
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
OffTopicliond66  [?]
Цитировать
Не могу найти кнопку "Вставить ник"
Кликните мышкой по нику и он добавится в форму ответа.


Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #22 Отправлен: Март 09, 2018, 13:21:56 »

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicВ режиме просмотра сообщений, при нажатии на ник ничего не происходит.
В режиме ответа - ник не активный элемент, кликнуть не получается

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 407
  • Репутация: 94
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicliond66, быстрый ответ

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicTempo, Не плохо, но нет значка [?] после ника.

 

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
В очередной раз программа упала через 48 часов с сообщением "Allocation memory error".
Запускал без компиляции, через SciTE (версия 3.7.3). Получил ExitCode=1.
Я понимаю, что дальше без кода просить помощи бесполезно. Прилагаю код основных функций.
Немного объяснений: запускается GUI с системной информацией и счётчиками:
счётчик общего кол-ва циклов первой программы SB (уникальная программа для предприятия, написана на Java),
счётчик удачно пройденных циклов SB, и неудачных, счётчик процента неудачных циклов.
За один цикл SB успевает запуститься несколько раз вторая программа Iperf https://ru.wikipedia.org/wiki/Iperf , причём в пяти экзэмплярах для проверки пяти сетевых карт. Получаеся на один цикл SB приходится в общем 30 циклов Iperf.
В GUI присутствуют соответственно счётчики Iperf: удачный цикл, неудачный, процент неудач.
При нажатии кнопки старт запускается функция Work, и из неё уже другие функции. Привожу код с некоторыми сокращениями.

Функция Work:
(нажмите для показа/скрытия)
Функция Test:
(нажмите для показа/скрытия)
Функция Iperf1. Аналогично функции Iperf2,Iperf3, Iperf4,Iperf5. Меняются только циферки 11, 111 на 22, 222 и т.д. в названиях переменных
(нажмите для показа/скрытия)
Функция CopySbLog:
(нажмите для показа/скрытия)

Буду рад помощи в поиске причины сбоя.
Спасибо.

Помечен как лучший ответ пользователем liond66 Отправлен Март 19, 2018, 17:04:59

Оффлайн sngr [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 894
  • Репутация: 360
    • Награды
  • Версия AutoIt: 3.3.8.1
Код: AutoIt [Выделить]
FileOpen($sFileX5, 1)
FileWrite($sFileX5, $Out9 & @CRLF)
FileFlush($sFileX5)
FileClose($sFileX5)

это неправильное использование функций, открытый FileOpen файл не закрыть так изучай справку.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
sngr
Спасибо за столь быстрый и полезный ответ, действительно ошибка. И как раз том самом подозрительном месте!
Как бы я хотел, чтобы это и была единственная причина крушения скрипта!
Так как проверка занимает продолжиительное время, я подожду денёк со следующим запуском,
и приглашаю высказать своё мнение также других участников форума.
Спасибо.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2808
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Эта ошибка в нескольких местах кода. В итоге, код увидели и нашли ошибку. Заочное обсуждение еще б на страницу затянули :)

Русское сообщество AutoIt

Re: Как обойти ограничение размера переменной 32767 ?
« Ответ #29 Отправлен: Март 12, 2018, 15:09:35 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
18 Ответов
10345 Просмотров
Последний ответ Май 27, 2011, 15:26:08
от RUVATA
4 Ответов
3005 Просмотров
Последний ответ Июль 18, 2010, 16:39:56
от dwerf
1 Ответов
2523 Просмотров
Последний ответ Октябрь 18, 2011, 01:33:23
от AZJIO
6 Ответов
3973 Просмотров
Последний ответ Октябрь 16, 2012, 10:53:14
от ArtInt
0 Ответов
1010 Просмотров
Последний ответ Апрель 07, 2014, 14:02:59
от Shinoby
3 Ответов
2020 Просмотров
Последний ответ Май 07, 2015, 11:45:54
от bescom
2 Ответов
957 Просмотров
Последний ответ Июль 07, 2015, 11:40:40
от Tapok
0 Ответов
665 Просмотров
Последний ответ Сентябрь 25, 2016, 12:58:08
от SNAK
2 Ответов
590 Просмотров
Последний ответ Декабрь 21, 2016, 09:35:54
от mechlab2
1 Ответов
369 Просмотров
Последний ответ Ноябрь 13, 2017, 10:30:22
от Tyr