Обсуждение статьи "Отладка программ на MQL5"

 

Опубликована статья Отладка программ на MQL5:

Эта статья ориентирована в первую очередь на программистов, которые уже изучили язык, но ещё недостаточно освоились в разработке программ. Статья раскрывает практические приёмы отладки программ и является объединенным опытом, не только моим, но и многих программистов, на опыте которых я учился.

Отладка программы - это стадия разработки, в которой обнаруживают и устраняют ошибки исполнения программы. В процессе отладки разработчик мысленно анализирует программу, и выясняет что с ней не так. Данные для анализа получают, наблюдая за состоянием переменных и процессом прохождения программы (какие функции когда вызываются).

Существуют две дополняющие друг друга технологии отладки:

  • Использование отладчика - утилиты, которая показывает пошаговое прохождение разрабатываемой программы.
  • Интерактивный вывод состояний переменных и вызовов функций на экран, в журнал или в файл.

Процесс отладки. Наблюдение за значениями переменных.

Автор: Nikolay Demko

 

По сути неплохо. Но.

1. Ни слова про утверждения (assertions) которые являются просто громадной помощью при отладке.

2. Трассировщик спорен, мягко говоря.

3. Необходимо упомянуть, что из-за оптимизации (компилятора) отладка сильно осложняется для простых функций из-за инлайнинга и предложить способы обхода этого недостатка.

 
TheXpert:

По сути неплохо. Но.

1. Ни слова про утверждения (assertions) которые являются просто громадной помощью при отладке.

2. Трассировщик спорен, мягко говоря.

3. Необходимо упомянуть, что из-за оптимизации (компилятора) отладка сильно осложняется для простых функций из-за инлайнинга и предложить способы обхода этого недостатка.

1 и 3 подумаю (может даже доработаю статью), у каждого много своих приёмов, а трассировку предлагайте (вернее просто вставляйте ссылки, предложений уже было много).
 
TheXpert:

3. Необходимо упомянуть, что из-за оптимизации (компилятора) отладка сильно осложняется для простых функций из-за инлайнинга и предложить способы обхода этого недостатка.

В отладчике инлайнинг полностью отключается и проходка полностью по исходному коду как есть.

В профайлере последних билдов была проблема с проставлением контрольных точек, что снижало качество отчетов, но уже исправили и в следующем билде на следующей неделе уже будет доступна новая версия с более детализированными отчетами.

 

Но вот то, что написано тут, в корне неверно:

Хочу отдельно отметить, что компилятор MetaEditor транслирует программы в байт-код, а не нативный код (подробнее читаем по ссылке). Это дает возможность создавать защищенные шифрованием программы, не боясь взлома. Также преимуществом такой трансляции является то, что байт-код может быть запущен как в 32-х битной версии операционной системы, так и в 64-х битной.

На первом этапе компиляции хранится универсальный байткод, но при исполнении в терминале этот байт код полностью на 100% переводится в нативный 32 или 64 битный код с дополнительной оптимизацией. Именно за счет перевода в нативный код мы кратно подняли скорость исполнения MQL5 программ по сравнению с MQL4.

Чистый байткод без трансляции в натив был в MQL4.

 
Renat:

В отладчике инлайнинг полностью отключается и проходка полностью по исходному коду как есть.

А давно так? Раньше это была большая проблема. Просто довольно давно не работал в 5ке.
 
TheXpert:
А давно так? Раньше это была большая проблема. Просто довольно давно не работал в 5ке.

С самого начала.

Инлайнинг съедает большую часть функций и с ним вообще невозможно было бы отлаживаться даже теоретически. Может Вы просто с первыми версиями отладчика работали, где был ряд проблем.

 

А для отладки во время прополки или без связи с рынком? Есть ли у вас решение? Потому что есть проблема после "OnTick" с отладчиком, на МТ4 есть"Tick generator", на мт5 что-то подобное?

Заранее спасибо,

 
Bisemper:

А для отладки во время прополки или без связи с рынком? Есть ли у вас решение? Потому что есть проблема после "OnTick" с отладчиком, на МТ4 есть "Tick generator", на мт5 что-то подобное?

Заранее спасибо,

Мы можем сделать ассоциацию об этом;-)
 

Оталдкой на реалтайме практически не пользуюсь ввиду долгого процесса прихода котировок и  нужного участка графика. 

Приходится по старинке Print пихать и отслеживать в тестере.

Все таки до Visual Studio местный отладчик  вообще не взлетает. Навел на переменную - она тебе значение, навел на выражение типа а+б /с - всплывает результат. В ME проще Print использвать .

 

Отладчик обязательно улучшим, как только закончим апгрейд МТ4.