Как определить источник откуда подлинковывается .mqh файл

Nikolai Karetnikov  

Доброго дня!

Настал момент когда количество .mqh файлов в проекте стало настолько большим, что его компиляция занимает ощутимое время.

Вопрос, как определить, из какого именно файла подлинковывается тот или иной .mqh?

Поиск Axis.mqh в файлах не даст результата, ведь он сам может быть вызван из .mqh неявно используемого в проекте.

Дерево связности .mqh файлов проекта каким-то автоматическим образом можно построить? 

Ну или есть способ проще до которого я не додумался?

Igor Makanu  

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

и поиск сейчас может по подключаемым файлам искать - там галка была

не?

как вариант, эту статью попробовать использовать https://www.mql5.com/ru/articles/272

Nikolai Karetnikov  
Igor Makanu:

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

и поиск сейчас может по подключаемым файлам искать - там галка была

не?

как вариант, эту статью попробовать использовать https://www.mql5.com/ru/articles/272

Спасибо!

Подключаемые файлы видны, но зависимости нет. Категория в проекте называется "Dependencies", на деле же она отображает файлы от которых зависит проект, а не дерево зависимости файлов внутри проекта. 

Статья хорошая, но скорее про отладку )

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

Алексей Тарабанов  

Раньше были варианты структуры программы: 1. Простая; 2. Оверлейная; 3. Динамическая. 

Сейчас - только простая и динамическая. 

Оверлейная руками делалась, кстати - очень легко на JCL. 

Сейчас Метаквоты обратили внимание на выгрузку программ, но если Вы обратите внимание на порядок их загрузки, то хуже не будет. Просто загружайте модули, как будто Вы используете оверлейную структуру программы. Думаю, так в МТ всё и происходит. 

Алексей Тарабанов  
А по-хорошему, нужно что-нибудь вроде редактора связей. На язык управления заданиями не замахиваюсь. 
fxsaber  

Один и тот же инклудник может попадаться несколько раз в проекте. Подключение его идет из первого вызова, остальные - игнорируются.

В ME последовательность mqh при компиляции может подсказать, в какой порядке идет подключение. Оттуда можно плясать.


Поиск из головного mq5-файла по имени mqh-файла должен помочь. Ведь там недавно появилась опция поиска в #include.

Алексей Тарабанов  
fxsaber:

Один и тот же инклудник может попадаться несколько раз в проекте. Подключение его идет из первого вызова, остальные - игнорируются.

В ME последовательность mqh при компиляции может подсказать, в какой порядке идет подключение. Оттуда можно плясать.


Поиск из головного mq5-файла по имени mqh-файла должен помочь. Ведь там недавно появилась опция поиска в #include.

Едрён батон. Поиск в намученном. 

Алексей Тарабанов  
fxsaber:

Один и тот же инклудник может попадаться несколько раз в проекте. Подключение его идет из первого вызова, остальные - игнорируются.

В ME последовательность mqh при компиляции может подсказать, в какой порядке идет подключение. Оттуда можно плясать.


Поиск из головного mq5-файла по имени mqh-файла должен помочь. Ведь там недавно появилась опция поиска в #include.

Всё совсем наоборот. Он один раз загрузился - и в памяти остался. Навсегда. Называется,- DLL. 

Stanislav Korotky  
Nikolai Karetnikov:

Доброго дня!

Настал момент когда количество .mqh файлов в проекте стало настолько большим, что его компиляция занимает ощутимое время.

Вопрос, как определить, из какого именно файла подлинковывается тот или иной .mqh?

Поиск Axis.mqh в файлах не даст результата, ведь он сам может быть вызван из .mqh неявно используемого в проекте.

Дерево связности .mqh файлов проекта каким-то автоматическим образом можно построить? 

Ну или есть способ проще до которого я не додумался?

Два варианта:

- взять утилиту https://www.mql5.com/en/code/27955

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

MQL5 Program Packer
MQL5 Program Packer
  • www.mql5.com
This script allows you to assemble a zip-file of your MQL5-program with all dependencies automatically. The dependencies are: included source files via #include directive (both modes of absolute (<>) and relative ("") references are supported); icons linked by #property icon directive; resources (images, sounds, and other types) embedded by...
Denis Kirichenko  
Есть способ от Сергеева. Нетривиальный, но красиво :-))
Трассировка, отладка и структурный анализ кода
Трассировка, отладка и структурный анализ кода
  • www.mql5.com
В данной статье речь пойдет про один из способов создания стека вызовов на этапе выполнения. Возможности, которые описаны в статье следующие: Составление структуры используемых классов, функций, файлов. Создание стека вызова, с сохранением всех прошлых стеков. Их последовательности вызовов. Просматривать состояние Watch-параметров на этапе...
Причина обращения: