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

 
MT5 디버거의 버그(빌드 2450) 수동으로 설정된 중단점의 잘못된 트리거:
 void test(){
   if ( false ){
       int i = 1 ;      // вручную установленная точка останова
   }   
}                     // место срабатывания точки останова при отладке

void OnStart (){
   test();   
}


상향:
비판에 감사드립니다. 원래 프로젝트 로 돌아가서 코드를 다시 최적화하지 않고 문제를 강조 표시했습니다.
 class A{
public :
   bool m_flag;
   A* m_next;
   A( bool flag) : m_flag(flag){}
   
   void test(){
       if (m_flag){
         printf ( "1" );
         m_next = m_next;      // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart (){
  {A a( false ); a.test();}   // Result: breakpoint               Expected result: 
  {A a( true );  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}
 
Sergey Dzyublik :
MT5 디버거의 버그(빌드 2450) 수동으로 설정된 중단점의 잘못된 트리거:

설명해주세요, 왜 그렇게 변태적입니까?

 if ( false )
디버깅을 사용하고 있습니까?
 
Sergey Chalyshev :

설명해주세요, 왜 그렇게 변태적입니까?

디버깅을 사용하고 있습니까?

이 코드는 조건을 입력할 수 없지만 코드의 완전히 다른 위치에 있는 동안 중단점이 여전히 발생하는 버그를 보여줍니다.
더 많은 질문?

 

오픈 지원 서비스에 다음 메시지를 작성했습니다.

로봇을 역사에서 테스트했습니다. 이상한 결과를 얻었습니다. 테이블 하단의 스크린샷. 거래가 100,000 루블로 수행된다는 점을 감안할 때 -6049의 마이너스 잔고와 17%의 손실은 불가능해 보입니다. 실제로 이 매개변수 집합 을 테스트하기 위해 차트를 열면 지정된 감소량에서 양의 균형을 얻습니다. 실제 계정은 75287 (사진에서 볼 수 있음)입니다. 프로그램의 이러한 동작에 대한 이유는 무엇입니까?

또한 모든 매개변수 세트에 이 동작이 있음을 추가할 수 있습니다.

응답을 받았습니다:

불행히도 그러한 질문은 기술 지원의 범위에 속하지 않습니다.

터미널 개발자에게 문의하십시오.

이유는 무엇입니까?

 
Sergey Dzyublik :

이 코드는 조건을 입력할 수 없는 BUG를 보여주지만 중단점이 여전히 트리거되고 동시에 코드의 완전히 다른 위치에 있습니다.
더 많은 질문?

모든 것이 맞는 것 같습니다. 프로그램은 if(false)를 무시하고 코드에서 가장 가까운 위치에서 실행됩니다.)

 
TraSer :

모든 것이 맞는 것 같습니다. 프로그램은 if(false)를 무시하고 코드에서 가장 가까운 위치에서 실행됩니다.)

절대 옳지 않습니다. 조건이 충족될 때만 중지해야 하고 중지가 모든 틱 에 있을 경우 지금은 미쳐버릴 것입니다 ...

 
Sergey Dzyublik :

더 많은 질문?

프로젝트를 컴파일할 때 컴파일러가 if (false) {....} 조건의 텍스트를 버리지 않기로 결정한 이유는 무엇입니까?

나머지 코드의 첫 번째 텍스트 문자 ME 에서 중단점이 나타났습니다. ME는 라인 이동, 접기 등 매력을 모르는 VS

ME는 실시간으로 코드를 분석하는 방법을 모릅니다. 사용 가능한 최대값은 자동 대체입니다.

버그라면 버그

 
Igor Makanu :

프로젝트를 컴파일할 때 컴파일러가 if (false) {....} 조건의 텍스트를 버리지 않기로 결정한 이유는 무엇입니까?

나머지 코드의 첫 번째 텍스트 문자 ME에서 중단점이 나타났습니다. ME는 라인 이동, 접는 방법 등을 모릅니다. 매력 VS

ME는 실시간으로 코드를 분석하는 방법을 모릅니다. 사용 가능한 최대값은 자동 대체입니다.

버그라면 버그

이것은 정상적인 상태에서 테스트해야 합니다. 나는 이것을 최근에 얻었다: 코드를 단계별로 실행할 때

   if (desiredProfit > 0 && summProfit > desiredProfit)
   {
    CloseAllPosition();
    DeleteAllPending();
    openSeries = Should_I_open;
     return ;
   }

디버거에서 조건이 명시적으로 실패하면 함수 호출 이 실행되지 않고 반환됩니다. 수행. 곡선 대괄호 뒤에 더 이상 코드가 없기 때문에 void OnTick()을 끝내는 곡선 대괄호가 하나만 더 있기 때문에 컴파일러가 return을 이동했다고 결정했습니다.

 
Alexey Viktorov :

이것은 정상적인 상태에서 테스트해야 합니다.

예, 나는 이것에 대해 쓰고 있습니다. 거짓은 필요하지 않지만 다음과 같은 것이 필요합니다.

 int i= 1 ;
if (--i == 0 )...

일반적으로 컴파일러는 컴파일할 때 이러한 조건을 보지 않습니다.

 
비판에 감사드립니다. 원래 프로젝트 로 돌아가서 코드를 다시 최적화하지 않고 문제를 강조 표시했습니다.
 class A{
public :
   bool m_flag;
   A* m_next;
   A( bool flag) : m_flag(flag){}
   
   void test(){
       if (m_flag){
         printf ( "1" );
         m_next = m_next;      // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart (){
  {A a( false ); a.test();}   // Result: breakpoint               Expected result: 
  {A a( true );  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}