Hatalar, hatalar, sorular - sayfa 2759

 
MT5 hata ayıklayıcısında (derleme 2450) manuel olarak ayarlanmış kesme noktalarının hatalı tetiklenmesinde hata:
 void test(){
   if ( false ){
       int i = 1 ;      // вручную установленная точка останова
   }   
}                     // место срабатывания точки останова при отладке

void OnStart (){
   test();   
}


UPD:
Eleştiri için teşekkürler, orijinal projeye geri döndüm ve kodu yeniden optimize etmeden sorunu vurguladım:
 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 hata ayıklayıcısındaki hata (derleme 2450) manuel olarak ayarlanmış kesme noktalarının hatalı tetiklenmesi:

Lütfen açıklayın, neden bu kadar sapık?

 if ( false )
Hata ayıklama kullanıyor musunuz?
 
Sergey Chalyshev :

Açıkla lütfen, neden bu kadar sapık?

Hata ayıklama kullanıyor musunuz?

Kod, koşulu girmenin imkansız olduğu bir HATA gösterir, ancak kodda tamamen farklı bir yerdeyken kesme noktası hala etkinleşir.
Daha çok soru?

 

Açılış destek servisine aşağıdaki mesajı yazdı.

Robotu tarihte test etti. Garip sonuçlar aldım. Tablonun altındaki ekran görüntüsü. Ticaretin 100.000 ruble ile yapıldığı göz önüne alındığında,% 17'lik bir düşüşle -6049'luk bir negatif bakiye mantıksız görünüyor. Gerçekten de, bu parametre setini test etmek için bir çizelge açtığımda, belirtilen düşüşte pozitif bir bakiye alıyorum. Gerçek hesap 75287'dir (fotoğrafta görülebilir). Programın bu davranışının nedeni ne olabilir?

Ayrıca tüm parametre kümelerinin bu davranışa sahip olduğunu da ekleyebilirim.

Bir yanıt aldı:

Ne yazık ki, bu tür sorular teknik desteğin yetkinliğinde değildir.

Lütfen terminal geliştiricileri ile iletişime geçin.

Nedeni ne olabilir?

 
Sergey Dzyublik :

Kod, koşulu girmenin imkansız olduğu bir HATA gösterir, ancak kesme noktası hala tetiklenir ve aynı zamanda kodda tamamen farklı bir yerde.
Daha çok soru?

Bana öyle geliyor ki her şey doğru. Program if(false)'ı yok sayar ve koddaki en yakın yerde çalışır.)

 
TraSer :

Bana öyle geliyor ki her şey doğru. Program if(false)'ı yok sayar ve koddaki en yakın yerde çalışır.)

Kesinlikle doğru değil. Sadece koşul yerine getirildiğinde durmam gerekiyorsa ve durma her tikte olacaksa, şimdilik çıldıracağım ...

 
Sergey Dzyublik :

Daha çok soru?

projeyi derlerken neden derleyicinin if (false) {....} koşulunun metnini atmadığına karar verdiniz?

kesme noktası , kalan kodun ilk metin karakteri ME'de ortaya çıktı, çünkü ME, çizgileri, katlamayı vb. nasıl değiştireceğini bilmiyor. tılsımlar VS

ME, kodu gerçek zamanlı olarak nasıl analiz edeceğini bilmiyor, mevcut olan maksimum değer otomatik değiştirmedir

bir hata olsa da, o zaman bir hata

 
Igor Makanu :

projeyi derlerken neden derleyicinin if (false) {....} koşulunun metnini atmadığına karar verdiniz?

kesme noktası, kalan kodun ilk metin karakteri ME'de ortaya çıktı, çünkü ME, çizgileri, katlamayı vb. nasıl değiştireceğini bilmiyor. tılsımlar VS

ME, kodu gerçek zamanlı olarak nasıl analiz edeceğini bilmiyor, mevcut olan maksimum değer otomatik değiştirmedir

bir hata olsa da, o zaman bir hata

Bu normal bir koşulla test edilmelidir. Bunu yakın zamanda anladım: kodda ilerlerken

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

hata ayıklayıcıda, koşulun açık bir şekilde başarısız olması durumunda, işlev çağrıları yürütülmedi, ancak geri döndü; gerçekleştirildi. Eğri parantezden sonra başka kod kalmadığından, geçersiz OnTick() ile biten yalnızca bir tane daha eğri parantez olduğuna karar verdim, derleyici geri döndü

 
Alexey Viktorov :

Bu normal bir koşulla test edilmelidir.

Evet, bunun hakkında yazıyorum, yanlışa ihtiyacınız yok, ama şöyle bir şey:

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

genellikle derleyici derlerken böyle bir durum görmez

 
Eleştiri için teşekkürler, orijinal projeye geri döndüm ve kodu yeniden optimize etmeden sorunu vurguladım:
 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
}