Как найти Zero divide

 
Обаружил при тестировании, что иногда в логе появляется следующая запись
MyTrader: zero divide



Через GetLastError() место деления на ноль отловить не могу. При делении на 0, вообще инициализируется LastError?

Как без отладчика и исключений в нескольких тысячах строк кода найти место, где производится деление на 0, кроме как везде тыкать вывод на консоль? Поделитесь опытом :)

 
Так же как и во всех языках программирования - проверяйте перед любом делением и забудьте про эксепшены как про страшный сон. Экспешены ловим мы и стопим любого эксперта за ошибки.
 
Экспешены ловим мы и стопим любого эксперта за ошибки.


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

Звучит примерно так
- "Пишите на ассемблере, и забудьте про С++ как про страшный сон ..."

Вам не кажется?
 
Так же как и во всех языках программирования - проверяйте перед любом делением и забудьте про эксепшены как про страшный сон.

Ошибку то я нашел, хоть и пришлось потратить некоторое кол-во времени. Насчет "страшного сна" не согласен, но спорить не буду. Для меня страшный сон, это ваш метод GetLastError(), который одновременно и возвращает ошибку и затирает ее. Или после каждой строки кода тоже GetLastError() делать, чтобы не потерять ошибку? У меня была ситуация, когда в некоторых случаях было обращение к несуществующему индексу массива, но обнаруживалась эта ошибка, только при проверке GetLastError() после записи в файл, т.е. программа продолжала работать как ни в чем не бывало и такой подход в обработке ошибок для меня действительно страшный сон. И насколько я понимаю, если за одной ошибкой возникает другая, то через GetLastError() будет доступна только последняя, что тоже вызывает опасения. Но спорить бесполезно, по крайней мере в MQL4 все останется, как есть.

Но если вы уже ловите сами исключения, то могли бы выдавать хоть название метода, в котором оно порождено, это ведь интерпретатору MQL должно быть известно и это существенно упростило бы отладку.
Ксати, раньше по-моему говорилось, что будет отладчик для MQL4, или это уже в прошлом?

Экспешены ловим мы и стопим любого эксперта за ошибки.

По крайней мере при тестировании эксперт не стопится, а прерывается метод start и дальше работа эксперта продолжается.
 
Еще о наболевшем. В первом посте я спрашивал "При делении на 0, вообще инициализируется LastError?". При поиске ошибке я обнаружил, что сразу после деления на 0 обработка start() просто прерывается и через GetLastError() эта ошибка не достается, соотвественно в свой лог я не могу вывести причину породившую проблему и т.п.

Однако в списке кодов ошибки у вас есть ERR_ZERO_DIVIDE 4013. Зачем этот код? ERR_ZERO_DIVIDE вообще где-то используется?

Вообще отутствие структур, объектов, исключений делает MQL настолько трудным в отладке, что чувствуешь себя программистом начала 90-х. Если посмотреть на дизайн функциональности по работе с ордерами и графическими объектами, то сразу думается как было бы проще получить объект ордер и обращаться именно к нему, через его методы, а не некому selected ордеру (через глобальные методы), который может измениться между отдельными вызовами функций, изменяющих его состояние. В общем страшный сон :)
Причина обращения: