Обсуждение статьи "Отладка программ на 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ке.

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

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

 

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

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

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

 

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

 
Renat:

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

Ренат, действительно как-то не продуманна система отладки. Отладка в режиме реального времени это аморально :) Отладка экспертов должна производиться в режиме тестирования стратегий. Иначе брейк поинты можно в помойку кинуть, и отлаживать "на коленках" через текстовые файлы и логи. Думаю, непопулярность MT5 именно в этом заключается, потому как функционал добавили, а его применимости нет, т.е. MT5 хоть и имеет отладку, классы и прочие пряники, но воспользоваться ими не возможно. Пока не будет нормального дебагера, все потуги будут тщетны.

С уважением, Александр.

 
Bonifacy:

Ренат, действительно как-то не продуманна система отладки. Отладка в режиме реального времени это аморально :) Отладка экспертов должна производиться в режиме тестирования стратегий. Иначе брейк поинты можно в помойку кинуть, и отлаживать "на коленках" через текстовые файлы и логи. Думаю, непопулярность MT5 именно в этом заключается, потому как функционал добавили, а его применимости нет, т.е. MT5 хоть и имеет отладку, классы и прочие пряники, но воспользоваться ими не возможно. Пока не будет нормального дебагера, все потуги будут тщетны.

С уважением, Александр.

Помнится, на 4-ке когда ни отладчика, ни структур еще не было приходилось отлаживать и MQL и DLL в паре. 

Поэтому утверждать что "пользоваться невозможно" тем, что есть сейчас, по крайней мере нелепо.

Кто хочет - ищет возможность. Сделали брейки, дебаг и на том спасибо, в модульной отладке помогает 100%. А глобально - можно и Print поставить по старинке.

А чтобы сделать MT5 популярным, необходимо уйти от MT4, остановить саппорт, обязать брокеров к переходу. Как произошло с MT4 билдами < 600. Это не от разработчиков зависит, тем более MQL-разработчиков.