Так же как и во всех языках программирования - проверяйте перед любом делением и забудьте про эксепшены как про страшный сон. Экспешены ловим мы и стопим любого эксперта за ошибки.
Экспешены ловим мы и стопим любого эксперта за ошибки.
А могли бы не стопить, а передавать управление в соответствующую функцию пользователя (событие).
Так же как и во всех языках программирования - проверяйте перед любом делением и забудьте про эксепшены как про страшный сон.
Звучит примерно так
- "Пишите на ассемблере, и забудьте про С++ как про страшный сон ..."
Вам не кажется?
Так же как и во всех языках программирования - проверяйте перед любом делением и забудьте про эксепшены как про страшный сон.
Ошибку то я нашел, хоть и пришлось потратить некоторое кол-во времени. Насчет "страшного сна" не согласен, но спорить не буду. Для меня страшный сон, это ваш метод GetLastError(), который одновременно и возвращает ошибку и затирает ее. Или после каждой строки кода тоже GetLastError() делать, чтобы не потерять ошибку? У меня была ситуация, когда в некоторых случаях было обращение к несуществующему индексу массива, но обнаруживалась эта ошибка, только при проверке GetLastError() после записи в файл, т.е. программа продолжала работать как ни в чем не бывало и такой подход в обработке ошибок для меня действительно страшный сон. И насколько я понимаю, если за одной ошибкой возникает другая, то через GetLastError() будет доступна только последняя, что тоже вызывает опасения. Но спорить бесполезно, по крайней мере в MQL4 все останется, как есть.
Но если вы уже ловите сами исключения, то могли бы выдавать хоть название метода, в котором оно порождено, это ведь интерпретатору MQL должно быть известно и это существенно упростило бы отладку.
Ксати, раньше по-моему говорилось, что будет отладчик для MQL4, или это уже в прошлом?
Экспешены ловим мы и стопим любого эксперта за ошибки.
По крайней мере при тестировании эксперт не стопится, а прерывается метод start и дальше работа эксперта продолжается.
Еще о наболевшем. В первом посте я спрашивал "При делении на 0, вообще инициализируется LastError?". При поиске ошибке я обнаружил, что сразу после деления на 0 обработка start() просто прерывается и через GetLastError() эта ошибка не достается, соотвественно в свой лог я не могу вывести причину породившую проблему и т.п.
Однако в списке кодов ошибки у вас есть ERR_ZERO_DIVIDE 4013. Зачем этот код? ERR_ZERO_DIVIDE вообще где-то используется?
Вообще отутствие структур, объектов, исключений делает MQL настолько трудным в отладке, что чувствуешь себя программистом начала 90-х. Если посмотреть на дизайн функциональности по работе с ордерами и графическими объектами, то сразу думается как было бы проще получить объект ордер и обращаться именно к нему, через его методы, а не некому selected ордеру (через глобальные методы), который может измениться между отдельными вызовами функций, изменяющих его состояние. В общем страшный сон :)
Однако в списке кодов ошибки у вас есть ERR_ZERO_DIVIDE 4013. Зачем этот код? ERR_ZERO_DIVIDE вообще где-то используется?
Вообще отутствие структур, объектов, исключений делает MQL настолько трудным в отладке, что чувствуешь себя программистом начала 90-х. Если посмотреть на дизайн функциональности по работе с ордерами и графическими объектами, то сразу думается как было бы проще получить объект ордер и обращаться именно к нему, через его методы, а не некому selected ордеру (через глобальные методы), который может измениться между отдельными вызовами функций, изменяющих его состояние. В общем страшный сон :)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Через GetLastError() место деления на ноль отловить не могу. При делении на 0, вообще инициализируется LastError?
Как без отладчика и исключений в нескольких тысячах строк кода найти место, где производится деление на 0, кроме как везде тыкать вывод на консоль? Поделитесь опытом :)