Projelerimden birindeki hata ayıklayıcı benim için çalışmayı reddediyor. Ayrıca, davranışını tahmin etmek zordur. Bazen sadece kesme noktalarına ulaşmayı reddediyor. Ayrıca bazı işlevlere girmeyi de reddediyor. İlk başta sebebin güncellemeler olduğunu düşündüm (birdenbire hata ayıklamada bir şeyler ters gitti). Ancak diğer daha basit programlarda her şey çalışıyor gibi görünüyor. Ana projem üzerinde çalıştığımdan beri çok detaylı kontrol etmedim. Oldukça karmaşık olduğu ortaya çıktı ve sadece tasarımımın 15 modülünü içeriyor (standart modüllerin sayısını saymadım). Ana modül 2000 satıra kadar içerir. Belki projenin karmaşıklığındandır diye düşündüm... Ayrıca, bazı yerlerde tekrarlayan kod parçacıkları için makrolar kullanıyorum. Ayrıca programımın işlevselliği için yeniden yazdığım CAppDialog, CCheckGroup, CComboBox, CButton vb. gibi standart UI öğelerini de kullanıyorum. Belki hata ayıklama onlar yüzünden çalışmıyor... Örneğin, hata ayıklama benim tarafımdan özel olarak yazılmış CCheckGroup::itemCheckState(const string item) yöntemine girmiyor. Yöntem, onay kutusu öğesini bulur ve seçili olup olmadığını kontrol eder (Durumu):
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int CCheckGroup::itemCheckState( conststring 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)
return m_states.At(i);
}
return - 1 ;
}
İşte bitirdiğim kullanıcı arayüzü:
Bazı UI öğeleri geçici olarak sınıflandırılır. Ve burada CAppDialog öğesinin Show() ve Hide() yöntemlerini nasıl geçersiz kıldığım hakkında konuştuğum başlık: https://www.mql5.com/ru/forum/338301 . Sonra derleyici yemin etti, kritik bir hata vardı.
Sonuç olarak, projenin normal bir şekilde derlendiği ortaya çıkıyor, derleyici herhangi bir hata üretmiyor. Ancak hata ayıklama sorunludur ve yalnızca bazı kod parçacıklarının, işlevlerin, yöntemlerin vb. yürütülmesini göstermez.
Anladığım kadarıyla, birkaç nedeni olabilir.
Karmaşık proje kodu, makro kullanımı
CAppDialog, CCheckGroup, CComboBox, CButton gibi standart UI öğelerini kullanarak kodu karmaşıklaştırma (buna yeni yöntemler de yazdım ve mevcut olanlardan bazılarını geçersiz kıldım)
Yeni yapıyla ilgili hata ayıklayıcı hatası (olası, ancak olası değil)
Yapı ve sistem bilgisi:
2020.05.21 09:35:09.325TerminalMetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp.
Öyleyse, Optimize Edici'den daha fazla verim istiyorsanız, SymbolInfo işlevleri için dize referanslı çözümün doğru olduğu açıktır.
Evet, bu bağlantının bir anlamı yok, geliştirici tarafından söyleniyor. Her şey referansla iletilir. Fark sadece eski MQL4'teydi. Ve bir dize okurken hiçbir kontrol yoktur.
Alexey Navoykov : Evet, bu bağlantının bir anlamı yok, geliştirici tarafından söyleniyor. Her şey referansla iletilir. Fark sadece eski MQL4'teydi. Ve bir dize okurken hiçbir kontrol yoktur.
Bu tür iddialar sadece sıkıcı.
int f1( string Str )
{
return ((Str += Str) == Str);
}
int f2( string &Str )
{
return ((Str += Str) == Str);
}
int Bench1( constint Amount = 1 e8 )
{
int Res = 0 ;
string Str = NULL ;
for ( int i = 0 ; i < Amount; i++)
Res += f1(Str);
Print (Res);
return (Res);
}
int Bench2( constint Amount = 1 e8 )
{
int Res = 0 ;
string Str = NULL ;
for ( int i = 0 ; i < Amount; i++)
Res += f2(Str);
Print (Res);
return (Res);
}
voidOnStart ()
{
BENCH(Bench1())
BENCH(Bench2())
BENCH(Bench1())
BENCH(Bench2())
}
Numara. Derleme zamanında, bu henüz bilinmiyor.
O zaman SymbolInfoTick'i on milyarlarca kez ararken çok sayıda kontrolden kaçınmanın nasıl bir faydası olur?
O zaman SymbolInfoTick'i on milyarlarca kez ararken çok sayıda kontrolden kaçınmanın nasıl bir faydası olur?
Mümkün değil. Yalnızca dizenin kendisini gereksiz yere kopyalamamaya yardımcı olur.
Mümkün değil. Yalnızca dizenin kendisini gereksiz yere kopyalamamaya yardımcı olur.
O zaman, Optimize Edici'den daha fazla verim istiyorsanız, SymbolInfo - fonksiyonları için dize referanslı çözümün doğru olduğu açıktır.
Projelerimden birindeki hata ayıklayıcı benim için çalışmayı reddediyor. Ayrıca, davranışını tahmin etmek zordur. Bazen sadece kesme noktalarına ulaşmayı reddediyor. Ayrıca bazı işlevlere girmeyi de reddediyor. İlk başta sebebin güncellemeler olduğunu düşündüm (birdenbire hata ayıklamada bir şeyler ters gitti). Ancak diğer daha basit programlarda her şey çalışıyor gibi görünüyor. Ana projem üzerinde çalıştığımdan beri çok detaylı kontrol etmedim. Oldukça karmaşık olduğu ortaya çıktı ve sadece tasarımımın 15 modülünü içeriyor (standart modüllerin sayısını saymadım). Ana modül 2000 satıra kadar içerir. Belki projenin karmaşıklığındandır diye düşündüm... Ayrıca, bazı yerlerde tekrarlayan kod parçacıkları için makrolar kullanıyorum. Ayrıca programımın işlevselliği için yeniden yazdığım CAppDialog, CCheckGroup, CComboBox, CButton vb. gibi standart UI öğelerini de kullanıyorum. Belki hata ayıklama onlar yüzünden çalışmıyor... Örneğin, hata ayıklama benim tarafımdan özel olarak yazılmış CCheckGroup::itemCheckState(const string item) yöntemine girmiyor. Yöntem, onay kutusu öğesini bulur ve seçili olup olmadığını kontrol eder (Durumu):
İşte bitirdiğim kullanıcı arayüzü:
Bazı UI öğeleri geçici olarak sınıflandırılır. Ve burada CAppDialog öğesinin Show() ve Hide() yöntemlerini nasıl geçersiz kıldığım hakkında konuştuğum başlık: https://www.mql5.com/ru/forum/338301 . Sonra derleyici yemin etti, kritik bir hata vardı.
Sonuç olarak, projenin normal bir şekilde derlendiği ortaya çıkıyor, derleyici herhangi bir hata üretmiyor. Ancak hata ayıklama sorunludur ve yalnızca bazı kod parçacıklarının, işlevlerin, yöntemlerin vb. yürütülmesini göstermez.
Anladığım kadarıyla, birkaç nedeni olabilir.
Yapı ve sistem bilgisi:
2020.05.21 09:35:09.325 Terminal MetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp.
2020.05.21 09:35:09.326 terminal Windows 10 build 14393, Intel Core i5-5200U @ 2.20GHz, 2/3 Gb bellek, 61/380 Gb disk, IE 11, UAC, GMT+2
Öyleyse, Optimize Edici'den daha fazla verim istiyorsanız, SymbolInfo işlevleri için dize referanslı çözümün doğru olduğu açıktır.
Evet, bu bağlantının bir anlamı yok, geliştirici tarafından söyleniyor. Her şey referansla iletilir. Fark sadece eski MQL4'teydi. Ve bir dize okurken hiçbir kontrol yoktur.
Bu tür iddialar sadece sıkıcı.
Bu tür iddialar sadece sıkıcı.
Belki yazmak daha kolaydır:
?...
Neden böyle içiyorsun?
Belki yazmak daha kolaydır:
Diğerleri tartışılıyor.
Bu tür iddialar sadece sıkıcı.
asılsız olmamak için, çizginin değişmediği testler için bir kıyaslama getirin.