Oh, evet, Puşkin, evet, orospu çocuğu.
Bu harika bir makale. Gerçek bir endoskop.
Büyük projelerde kesinlikle kullanacağım. Hatanın nerede olduğunu bulmam 24 saatimi alıyor.
Debugger iyi ama trace sinyal geçişinin tam bir resmini veriyor.
Rica ederim, sizin için elimden geleni yaptım. :)
Bu sistemdeki işlevselliği sürdürmeyi ve genişletmeye çalışmayı planlıyorum. Bir şeye ihtiyaç olacaksa, o zaman yazın.
-----
Tam açıklık için tamamen teknik iki noktadan daha bahsetmek gerektiğini düşünüyorum.
1. Trace.mqh dosyasında izleyicinin tek bir örneği oluşturulur (dosyanın en altında).
extern CTraceCtrl* m_trace; // izleyicinin tek bir örneği
Extern yönergesi sayesinde, örnek sadece bir tane olacaktır. Yani, #include "Trace.mqh" dosyasına kaç tane #include "Trace.mqh" dosyası dahil edildiğine bağlı değildir
2. CTraceView sınıfı CTraceCtrl 'de sadece tek bir nedenle kullanılır - CTraceCtrl::Break fonksiyonunu çalıştırmak için.
Yani, döngülü bir while (true) içinde kullanıcı tıklamalarına tepki vermek için
Tüm sınıfların güncellendiği __PATH__ makro işleme eklendi (yapı 420).
INFO penceresine bir düğüm dosyası açmak için düğme eklendi.

Açma işlemi ShellExecute komutu ile gerçekleştirilir, bu nedenle sınıfların çalışması için DLL içe aktarma izni gereklidir
düğüm açıklaması eklemek için işlevsellik eklendi.
Artık _IN makrolarında, örneğin bir düğüme girme koşullarını veya ilgili bazı bilgileri görüntülemek için ek bir açıklama eklemek mümkündür.
Bu açıklama ağaç ekranında dinamik olarak güncellenir.
Kod örneği:
void OnTick() { _IN(""); static datetime limit_time=0; // son işlem süresi + zaman aşımı //--- zaman aşımına uğrarsa işleme koymayın if(TimeCurrent()>=limit_time) { _IN2(TimeCurrent()+">="+limit_time); //--- veri olup olmadığını kontrol edin if(Bars(Symbol(),Period())>2*InpMATrendPeriod) { _IN3(Bars(Symbol(),Period())>2*InpMATrendPeriod); //--- işlenirse limit süresini saniye cinsinden zaman aşımına göre değiştirin if(ExtExpert.Processing()) limit_time=TimeCurrent()+ExtTimeOut; } } //--- }
Bilgilerin nasıl görüneceğine dair bir örnek

Açıklama ekranını etkinleştirmek için düğme - sağ üst "i"
1. Düğüm özelliklerini görüntülemek için ayrı bir CPropertyView sınıfı eklendi.
2. Sınıfların tüm geçersiz kılınmış işlevleri sanal hale getirildi, böylece tüm sınıflar güncellendi.
3. CNode sınıfına iki yeni özellik eklendi.
m_edit - CPropertyView'de düzenlenebilir alanın işareti
m_brkuse - CTraceCtrl::Break fonksiyonunun durdurulduğu ve çağrıldığı düğüme yapılan çağrı sayısı.
3. Urain'in forumdaki notlarına göre, kod durdurmalarını kullanmak için iki olasılık eklendi.
- durdurmaları etkinleştir/devre dışı bırak (kırmızı düğme D)
- belirtilen düğüm çağırma sayısına göre durdurma
а. Düğümdeki ilk m_brkuse sayısının ayarlanması bir makro kullanılarak yapılabilir (Trace dosyasında)
#define _BRKUSES(u) if (!NIL(m_trace)) if (!NIL(m_trace.m_cur)) ........
b. Veya doğrudan düğüm özellikleri penceresinde, durdurmadan önce gerekli çağrı sayısını belirten"DebugBreak after" alanında

CHARTEVENT_CLICK
CHARTEVENT_KEYDOWN
CHARTEVENT_OBJECT_DELETE
CHARTEVENT_OBJECT_CHANGE
CHARTEVENT_OBJECT_CREATE
5. Ağaç eşlemede küçük kozmetik değişiklikler
Bu mekanizmayı komut dosyalarında kullanmanın bir yolu var mı?
Sanırım var. Ancak genellikle komut dosyalarında kod çok fazla dallanmaz (tabii ki komut dosyası bir döngü içinde değilse).
Ayrıca, bir rahatsızlık var - OnChartEvent olayı komut dosyalarında işlenmiyor.
Sanırım öyle. Ancak genellikle komut dosyalarında kod çok fazla dallanmaz (tabii ki komut dosyası bir döngü içinde değilse).
Ayrıca, bir rahatsızlık var - komut dosyaları OnChartEvent olayını işlemez.
Ve eğer betiğim birçok farklı sınıf kullanıyorsa, sınıf hiyerarşileri?
Bence betikler için de aracı keskinleştirmek gerekiyor...
CTraceView sınıfı kendisini kimin çağırdığını umursamaz. Bir ağaç oluşturur ve onu görüntüler.
Ancak komut dosyalarının çözülemeyen bir geri bildirim sorunu vardır. Ağaç ile aktif olarak çalışamazsınız.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale Kaynak Kodun İzlenmesi, Hata Ayıklanması ve Yapısal Analizi yayınlandı:
Yürütülen bir kodun yapısını oluşturma ve izleme sorunlarının tamamı, ciddi zorluklar olmadan çözülebilir. Bu olasılık, MQL5 dilinin yeni özelliği - karmaşık veri türlerinin (yapılar ve sınıflar) otomatik olarak oluşturulması ve yerel kapsam dışına çıkarken bunların ortadan kaldırılması nedeniyle MetaTrader 5'te ortaya çıkmıştır. Makale, metodolojinin ve hazır aracın açıklamasını içerir.
Böyle bir kırılma noktasıyla karşılaşıldığında, yığın ağaçları bu makroyu çağıran işlevi görüntülemek için senkronize edilir. Bir düğüm kapalıysa, üst düğüm onu gösterecek şekilde genişletilir. Ve gerekirse, düğümü görünür alana getirmek için ağaç yukarı veya aşağı kaydırılır.
CTraceCtrl::Break'ten çıkmak için, düğüm adının yanında bulunan kırmızı düğmeye tıklayın.
Yazar: ---