"Hataları Bulma ve Günlüğe Kaydetme" makalesi için tartışma

 

Yeni makale Hataları Bulma ve Günlüğe Kaydetme yayınlandı:

MetaEditor 5 hata ayıklama özelliğine sahiptir. Ancak MQL5 programlarınızı yazarken, genellikle ayrı değerleri değil, test ve çevrimiçi çalışma sırasında görünen tüm mesajları görüntülemek istersiniz. Günlük dosyası içeriğinin boyutu büyük olduğunda, gerekli mesajın hızlı ve kolay alınmasını otomatikleştirmek aşikardır. Bu makalede MQL5 programlarında hata bulma yollarını ve günlüğe kaydetme yöntemlerini ele alacağız. Ayrıca, dosyalara günlük tutmayı basitleştireceğiz ve günlüklerin rahat bir şekilde görüntülenmesi için basit LogMon programı hakkında bilgi edineceğiz.

Şimdi size bir dosyaya günlüğe kaydetmeyi nasıl iyileştirebileceğinizi anlatacak ve göstereceğim ve günlükleri görüntülemek için kullanışlı bir araç vereceğim. Bu, C++ ile yazdığım ve LogMon adını verdiğim Windows uygulamasıdır.

Tüm günlüğe kaydetme işlemini yapacak olan sınıfı yazmaya başlayalım; yani:

  1. Günlük ve diğer günlük ayarlarının yazılacağı dosyanın konumunu saklayın.
  2. Verilen ada ve tarihe/saate bağlı olarak günlük dosyaları oluşturun.
  3. İletilen parametreleri günlük satırına dönüştürün.
  4. Günlük mesajına zaman ekleyin.
  5. Mesaj rengi ekleyin.
  6. Mesaj kategorisi ekleyin.
  7. Mesajları önbelleğe alın ve bunları her n-saniyede bir veya her n-mesajda bir yazın.

MQL5 nesne yönelimli bir dil olduğu ve hızında C++'dan önemli ölçüde farklı olmadığı için özellikle MQL5 için bir sınıf yazacağız. O halde başlayalım.


Dosyaya Günlük Yazma Sınıfını Uygulama

Sınıfımızı mqh uzantılı ayrı bir içerme dosyasına koyacağız. Sınıfın genel yapısı şu şekildedir.

CLogger

Yazar: Дмитрий Александрович

 

Yazı için teşekkürler. Uzun zamandır böyle bir şey yaratmak istiyordum ama bir türlü elim gitmiyordu. Ve şimdi... Zaten kullanıyorum.

 
papaklass:

Yazıyı ben de beğendim, teşekkürler. Çünkü MT atlamalarla yazdırıyor ve bu çok rahatsız edici.

Atlamalar sadece "Uzmanlar" sekmesindedir. Tüm mesajlar günlük dosyasında.
 

Ben daha çok bu veya benzeri şeylerle ilgileniyordum:

void PrintDebugInfo(string InputString)
{
  CopyTime(Symbol(),Period(),0,1,Time);
  ArraySetAsSeries(Time,true);
  FileWrite(FileHandle,Time[0],"   ",InputString);
}

Kod için teşekkürler, kullanacağız....

 
Lizar:

Yazı için teşekkürler. Uzun zamandır böyle bir şey yaratmak istiyordum ama bir türlü elim gitmiyordu. Ve şimdi... Ben zaten kullanıyorum.

Kullanmakta serbestsiniz! :)
Siz kullandıkça ben de sınıfı ve programı geliştireceğim, çünkü önce kendim için yazdım, sonra aklıma makale geldi))))
 

Çok faydalı malzeme!

 

Ekteki .exe hala Rusça dilinde. Lütfen yeniden yükleyebilir misiniz?

Not: Bu gerçekten faydalı! Herhangi bir OOP projesinde bildirilmesi gereken ilk sınıflardan biri, hataları ele almak için bir sınıftır!

 
Yorumunuz için teşekkür ederiz. Artık bu yardımcı programın doğru İngilizce sürümünü ekli dosyalarda bulabilirsiniz.
 

Flush kullanmayı unutursanız veri kaybı meydana gelebilir.

Daha iyi bir çözüm aşağıdaki gibi olabilir:


private:
   void              flush(void);              // Önbelleği dosyaya aktarma
//+------------------------------------------------------------------+
//| Devre dışı bırakma|
//+------------------------------------------------------------------+
void CLogger::deinit(void)
  {
   flush();  // Verileri temizle
   FileClose(handleFile); // Dosyayı kapat
  }

Böylece veri otomatik olarak kaydedilir.

ps.: Yazımı bozduysam özür dilerim, google çevirmen bana yardımcı oldu...

 

Dmitry Alexandrovich, çalışmanız için teşekkür ederim, uzun zamandır böyle bir şey arıyordum ve sonunda buldum ))

logmon.exe'yi geliştirmek için öneri, günlükleri içeren dosyaların aranacağı yolları belirleyebilecek bir ayar yapmak, çünkü farklı klasörlerde iki kopyaya sahip olmak (test cihazı ve standart çalışma için) bir şekilde amatörce ))

Gerçi belki elime geçtiğinde kendim bitiririm))

eğer başka yararlı bir şeyiniz varsa yayınlayın, programlama ve materyal sunma tarzınız çok beyinsiz)).

 

Geçmiş veriler üzerinde hata ayıklama yaparken bir hata alıyorum: "MQL5 hata ayıklayıcı geçmiş üzerinde 'testlogger.ex5' hata ayıklamasını başlatamadı". Gerçek veriler üzerinde sorunsuz çalışıyor.

Geçmişte çalışması için neyi değiştirmem gerektiğini söyleyebilir misiniz?