오류, 버그, 질문 - 페이지 2747

 

안녕하세요! 다음 메시지가 MT5 로그에 나타납니다. 2020.05.21 05:49:44.364 Virtual Hosting이 가상 호스트 목록을 가져오지 못했습니다(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줄이 포함됩니다. 프로젝트의 복잡성 때문이 아닐까 생각합니다... 또한, 반복적인 코드 조각에 매크로를 사용하는 곳도 있습니다. 또한 CAppDialog, CCheckGroup, CComboBox, CButton 등과 같은 표준 UI 요소를 사용합니다. 이 요소는 내 프로그램의 기능을 위해 다시 작성했습니다. 아마도 디버깅이 작동하지 않기 때문일 것입니다. 예를 들어, 내가 특별히 작성한 CCheckGroup::itemCheckState(const string item) 메서드에 디버깅이 입력되지 않습니다. 이 메서드는 확인란 요소를 찾고 선택되었는지 확인합니다(상태).

다음은 내가 만든 UI입니다.

일부 UI 요소는 일시적으로 분류됩니다. 그리고 여기 CAppDialog 요소의 Show() 및 Hide() 메서드를 재정의하는 방법에 대해 이야기하는 스레드가 있습니다. https://www.mql5.com/ru/forum/338301 . 그런 다음 컴파일러는 치명적인 오류가 있다고 맹세했습니다.

결과적으로 프로젝트가 정상적으로 컴파일되고 컴파일러에서 오류가 발생하지 않는 것으로 나타났습니다. 그러나 디버깅은 버그가 있으며 일부 코드 조각, 함수, 메서드 등의 실행을 표시하지 않습니다.

내가 이해하는 한 여러 가지 이유가 있을 수 있습니다.

  1. 복잡한 프로젝트 코드, 매크로 사용
  2. CAppDialog, CCheckGroup, CComboBox, CButton과 같은 표준 UI 요소를 사용하여 코드를 복잡하게 만들기
  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 항목: 39 상태: 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-тик.

옵티마이저에서는 이러한 기능을 수십억 번 호출합니다.


더욱이 이 기능의 실행이 어드바이저 실행 시간의 상당 부분을 차지하는 경우 캐시 옵션이 상당한 솔루션입니다(나는 거의 믿지 않음).

어느 단계에서는 차지하는 시간의 상대적인 부분뿐만 아니라 절대적인 부분도 중요해진다.