Ошибки, баги, вопросы - страница 2747

 

Добрый день! В журнале МТ5 выскакивает вот такое сообщение: 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])

Подскажите, люди добрые, что бы это значило, и что с этим делать?

Спасибо!

 
fxsaber:
time of [Bench1()] = 1483377
100000000
time of [Bench2()] = 1725035
100000000
time of [Bench1()] = 1523441
100000000
time of [Bench2()] = 1712777
100000000
time of [Bench1()] = 1416779
100000000
time of [Bench2()] = 1452093
100000000
time of [Bench1()] = 1399366
100000000
time of [Bench2()] = 1449939
 
Mihail Matkovskij:

У меня отказывается работать отладчик в одном моём проекте. При чем, его поведение сложно предсказать. Иногда он просто отказывается заходить на точки останова. В некоторые функции также заходить отказывается напрочь. Сначала я думал, причина в обновлениях (вдруг с отладкой что-то пошло не так). Но в других более простых программах всё вроде работает. Хотя я особо подробно не проверял, так как работаю над своим основным проектом. Он получился довольно сложным и включает в себя 15 модулей только моей разработки (количество стандартных модулей я не считал). Основной модуль содержит до 2000 строк. Я подумал, может быть всё дело в сложности проекта... К тому же, в некоторых местах я испольную макросы для повторяющихся фрагментов кода. Еще я использую стандартные элементы UI, такие как CAppDialog, CCheckGroup, CComboBox, CButton и т.п, которые я переписал под функционал моей программы. Возможно отладка не работает из-за них... Например, в метод CCheckGroup::itemCheckState(const string item), специально написанный мною, отладка не заходит. Метод находит элемент чек бокса и проверяет выбран ли он (его State):

Вот какой UI получился у меня в итоге:

Часть элементов UI временно засекречена. А вот ветка, где я рассказываю о том как я переопределил методы Show() и Hide() элемента CAppDialog: https://www.mql5.com/ru/forum/338301. Тогда компилятор ругался, возникла критическая ошибка.

В итоге получается, что проект нормально компилируется, компилятор не выдает никаких ошибок. Но отладка работает со сбоями и просто не показывает выполнение некоторых фрагментов кода, функций, методов и т.п.

На сколько я понимаю, причин может быть несколько.

  1.  Сложный код проекта, использование макросов
  2.  Усложнение кода использованием стандартных элементов UI, таких как CAppDialog, CCheckGroup, CComboBox, CButton (к которым я, к тому же, написал новые методы и переопределил некоторые из существующих)
  3.  Баг отладчика, связанный с новым билдом (возможно, хоть и маловероятно)

Информация о билде и системе:

У кого возникали подобные проблемы с отладчиком и в чём может быть причина?

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

В методе CCheckGroup::itemCheckState (в который отладчик добраться не может) прописал примерно следующее:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CCheckGroup::itemCheckState(const string item) {
  int total = m_strings.Total();
  
  if(total != m_states.Total())
    return -1;
    
  int i = 0;
  for(; i < total; i++) {
    if(m_strings.At(i) == item) {
      Alert(__FUNCTION__ + " item: " + item  + " state: " + (string)m_states.At(i));
      return m_states.At(i);
    }
  }
  
  return -1;
}

И получил следующее сообщение:

2020.05.21 13:20:44.229 CCheckGroup::itemCheckState item: 39 state: 32 

Получается, метод исправно работает, но отладчик почему-то перестаёт видеть его. Без нормальной работы отладчика работа над проектом может на долго затянуться. Хотелось бы, чтобы Разработчики обратили внимание на данный баг связанный скорее всего с отладчиком. 
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.05.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Mihail Matkovskij:

https://www.mql5.com/ru/forum/1111/page2746#comment_16481481

Получается, метод исправно работает, но отладчик почему-то перестаёт видеть его.
Без нормальной работы отладчика работа над проектом может на долго затянуться. Хотелось бы, чтобы Разработчики обратили внимание на данный баг связанный скорее всего с отладчиком. 

Очень много текста, все не читал.
Но если у вас что-то работает в дебаг версии и при этом не работает в релиз, или наоборот, то проверьте все ли переменные и поля, особенно в классе/структуре, были инициализированы.

 
Mihail Matkovskij:
возможно метод инлайнится, тогда это проблема не отладчика, а компилятора для дебаг-режима
 
TheXpert:
input int Range = 0;

double Res = 0;

#define GETCURRENTTICK GetCurrentTick1(Tick)
//#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
//#define GETCURRENTTICK GetCurrentTick3(Tick)

void OnTick()
{
  MqlTick Tick;
    
  for (int i = 0; i < 100; i++)
    if (GETCURRENTTICK)
      Res += Tick.bid;
}

double OnTester()
{
  return(Res);
}

bool GetCurrentTick1( MqlTick &Tick )
{
  return(SymbolInfoTick(_Symbol, Tick));
}

bool GetCurrentTick2( MqlTick &Tick, const bool NewTick = false )
{
  static MqlTick CurrentTick;
  
  if (NewTick)
    SymbolInfoTick(_Symbol, CurrentTick);
  
  Tick = CurrentTick;
  
  return(true);
}

bool GetCurrentTick3( MqlTick &Tick )
{
  static MqlTick _Tick; // Аналог Bid в MT4
  
  _Tick.bid += _Point;  // Хоть какой-то расход вычислительный ресурсов.
  
  Tick = _Tick;
  
  return(true);
}
#define GETCURRENTTICK GetCurrentTick1(Tick)
#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
#define GETCURRENTTICK GetCurrentTick3(Tick)
2020.05.21 14:19:52.450 Core 1  pass 0 returned result 693275970.165784 in 0:00:08.925
2020.05.21 14:19:59.980 Core 1  pass 1 returned result 693275970.165784 in 0:00:07.529
2020.05.21 14:20:07.370 Core 1  pass 2 returned result 693275970.165784 in 0:00:07.390
2020.05.21 14:20:14.694 Core 1  pass 3 returned result 693275970.165784 in 0:00:07.323
2020.05.21 14:20:21.688 Core 1  pass 4 returned result 693275970.165784 in 0:00:06.994
2020.05.21 14:20:29.114 Core 1  pass 5 returned result 693275970.165784 in 0:00:07.425
2020.05.21 14:20:36.133 Core 1  pass 6 returned result 693275970.165784 in 0:00:07.019
2020.05.21 14:20:43.557 Core 1  pass 7 returned result 693275970.165784 in 0:00:07.424
2020.05.21 14:20:49.580 Core 1  pass 8 returned result 693275970.165784 in 0:00:06.022
2020.05.21 14:20:57.273 Core 1  pass 9 returned result 693275970.165784 in 0:00:07.693
2020.05.21 14:21:03.993 Core 1  pass 10 returned result 693275970.165784 in 0:00:06.719
2020.05.21 14:21:03.993 Tester  optimization finished, total passes 11
2020.05.21 14:21:04.003 Statistics      optimization done in 1 minutes 22 seconds
2020.05.21 14:21:04.003 Statistics      shortest pass 0:00:06.022, longest pass 0:00:08.925, average pass 0:00:07.314
2020.05.21 14:21:04.003 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:21:49.346 Core 1  pass 0 returned result 693275970.165784 in 0:00:03.050
2020.05.21 14:21:51.108 Core 1  pass 1 returned result 693275970.165784 in 0:00:01.761
2020.05.21 14:21:52.903 Core 1  pass 2 returned result 693275970.165784 in 0:00:01.795
2020.05.21 14:21:54.731 Core 1  pass 3 returned result 693275970.165784 in 0:00:01.827
2020.05.21 14:21:56.536 Core 1  pass 4 returned result 693275970.165784 in 0:00:01.803
2020.05.21 14:21:58.341 Core 1  pass 5 returned result 693275970.165784 in 0:00:01.805
2020.05.21 14:22:00.135 Core 1  pass 6 returned result 693275970.165784 in 0:00:01.793
2020.05.21 14:22:01.912 Core 1  pass 7 returned result 693275970.165784 in 0:00:01.777
2020.05.21 14:22:03.663 Core 1  pass 8 returned result 693275970.165784 in 0:00:01.750
2020.05.21 14:22:05.458 Core 1  pass 9 returned result 693275970.165784 in 0:00:01.794
2020.05.21 14:22:07.274 Core 1  pass 10 returned result 693275970.165784 in 0:00:01.815
2020.05.21 14:22:07.274 Tester  optimization finished, total passes 11
2020.05.21 14:22:07.284 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:22:07.284 Statistics      shortest pass 0:00:01.750, longest pass 0:00:03.050, average pass 0:00:01.906
2020.05.21 14:22:07.284 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.21 14:23:00.873 Core 1  pass 0 returned result 661757660284.981689 in 0:00:02.859
2020.05.21 14:23:02.704 Core 1  pass 1 returned result 661757660284.981689 in 0:00:01.830
2020.05.21 14:23:04.488 Core 1  pass 2 returned result 661757660284.981689 in 0:00:01.783
2020.05.21 14:23:06.227 Core 1  pass 3 returned result 661757660284.981689 in 0:00:01.737
2020.05.21 14:23:07.778 Core 1  pass 4 returned result 661757660284.981689 in 0:00:01.550
2020.05.21 14:23:09.517 Core 1  pass 5 returned result 661757660284.981689 in 0:00:01.738
2020.05.21 14:23:11.288 Core 1  pass 6 returned result 661757660284.981689 in 0:00:01.771
2020.05.21 14:23:12.997 Core 1  pass 7 returned result 661757660284.981689 in 0:00:01.708
2020.05.21 14:23:14.815 Core 1  pass 8 returned result 661757660284.981689 in 0:00:01.817
2020.05.21 14:23:16.621 Core 1  pass 9 returned result 661757660284.981689 in 0:00:01.805
2020.05.21 14:23:18.313 Core 1  pass 10 returned result 661757660284.981689 in 0:00:01.691
2020.05.21 14:23:18.313 Tester  optimization finished, total passes 11
2020.05.21 14:23:18.323 Statistics      optimization done in 0 minutes 21 seconds
2020.05.21 14:23:18.323 Statistics      shortest pass 0:00:01.550, longest pass 0:00:02.859, average pass 0:00:01.844
2020.05.21 14:23:18.323 Statistics      local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

На тему бесплатности SymbolInfo-функций.

 
TheXpert:
возможно метод инлайнится, тогда это проблема не отладчика, а компилятора для дебаг-режима

Вот-вот, проект получился переполненным макросами вдоль и поперек, как моими, так и из стандартных модулей. Возможно, поэтому, у отладчика не всегда получается сопоставить  команды в дебаг файле *.ex5 со строками в исходном файле *.mq5 и остальных модулях...

 
fxsaber:
На тему бесплатности SymbolInfo-функций.

так это стоимость самой функции а не передачи строки по значению а не по ссылке!

тем более ваш вариант с кэшем вполне себе решение, если выполнение этой функции занимает значимый процент времени от времени выполнения советника (во что я слабо верю)

 
Mihail Matkovskij:

Вот-вот, проект получился переполненным макросами вдоль и поперек, как моими, так и из стандартных модулей. Возможно, поэтому, у отладчика не всегда получается сопоставить  команды в дебаг файле *.ex5 со строками в исходном файле *.mq5 и остальных модулях...

возможно у вас такая сложная структура файлов, что отладчик не может ассоциировать точку останова, тогда это проблема отладчика.
 
TheXpert:

так это стоимость самой функции а не передачи строки по значению а не по ссылке!

Изначально к этому подводил.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2020.05.20 13:24

А лучше, конечно, иметь

const MqlTick _Tick; // Текущий _Symbol-тик.

В Оптимизаторе эти функции вызываются десятки миллиардов раз.


тем более ваш вариант с кэшем вполне себе решение, если выполнение этой функции занимает значимый процент времени от времени выполнения советника (во что я слабо верю)

На определенном этапе становится важным не только относительное часть занимаемого времени, но и абсолютная.

Причина обращения: