Что это за crash - страница 5

 
Maxim Kuznetsov:

пошла реклама "вимпоцетина" :-)

PS/ если 4-ка работает, 5-ка работает, наверное ТС и ещё что-то кроме терминалов исползьует, а крашится только один конкретный индюк, то сильно вряд-ли дело в чипах памяти

Именно. Все работало нормально. А при тестировании крашился терминал. Не сразу. Оказалось дело в памяти. Даже просто удаление из слота одной димм решало проблему. Прикупил новую.
 
Artyom Trishkin:
Именно. Все работало нормально. А при тестировании крашился терминал. Не сразу. Оказалось дело в памяти. Даже просто удаление из слота одной димм решало проблему. Прикупил новую.

И какова вероятность что проблема в памяти исключительно на этом индикаторе? Я только что запустил советник. Дебагер отрабатывает без проблем.

 
Artyom Trishkin:
Именно. Все работало нормально. А при тестировании крашился терминал. Не сразу. Оказалось дело в памяти. Даже просто удаление из слота одной димм решало проблему. Прикупил новую.

проверяется очень просто - берёшь чистую систему (пустую VDS) и запускаешь терминал с индюком. Накладных расходов на 1 день около 0. Ну может доллар.

хотя 99% что это лишнее - не выдумывайте лишних сущностей. ТС портирует софт с MT4 на MT5 и именно при этом при работе с подкачкой данных возникает крах.

PS/ совсем дурацкий, никчёмный вопрос - а у ТС рассчёты идут в OnCalculate или в start() ?? такое тоже бывает

 
Alexey Viktorov:

И какова вероятность что ароблема в памяти исключительно на этом индикаторе? Я только что запустил советник. Дебагер отрабатывает без проблем.

Просто вспомнил о давнишней проблеме, имевшей место быть. Можешь не проверять.
 
Maxim Kuznetsov:

проверяется очень просто - берёшь чистую систему (пустую VDS) и запускаешь терминал с индюком. Накладных расходов на 1 день около 0. Ну может доллар.

хотя 99% что это лишнее - не выдумывайте лишних сущностей. ТС портирует софт с MT4 на MT5 и именно при этом при работе с подкачкой данных возникает крах.

PS/ совсем дурацкий, никчёмный вопрос - а у ТС рассчёты идут в OnCalculate или в start() ?? такое тоже бывает

Я рад что вы в меня верите. Конечно в OnCalculate, и даже на mql4 был написан в OnCalculate и с #property strict

 

крах может быть и внутри OnInit....и даже в начале OnCalculate

он-же крах, ему можно всех опережать :-)

попробуйте отключить оптимизацию. И наставить принтов.

если вы говорите что в дебаге оно работает всегда, а при обчном запуске валится с историей.

 
Maxim Kuznetsov:

крах может быть и внутри OnInit....и даже в начале OnCalculate

он-же крах, ему можно всех опережать :-)

попробуйте отключить оптимизацию. И наставить принтов.

если вы говорите что в дебаге оно работает всегда, а при обчном запуске валится с историей.

В дебагере по F5 проходит. Но не идёт в дебагере по Ctrl-F5, то-есть на исторических данных. Не идёт вообще... Даже не входит в OnInit(), а если кинуть на график, то крашится.

 

раз на исходник смотреть нельзя,

то может быть опишите технику "что поменялось в коде индкитатора при переносе с Mt4 на 5".. можно даже diff кинуть - врядли в нём ваши секретные формулы тайны рынка ;-)

 
Maxim Kuznetsov:

раз на исходник смотреть нельзя,

то может быть опишите технику "что поменялось в коде индкитатора при переносе с Mt4 на 5".. можно даже diff кинуть - врядли в нём ваши секретные формулы тайны рынка ;-)

Даже не знаю как ответить. Индикатор из фриланса, писан не мной. В сети под тем именем как есть найти не получилось нигде. Автор на этом сайте есть. Почему заказчик не обратился к нему, меня не интересует, а в наличии у него только индикатор на mql4 и советник на mql5 с привязанным индикатором в виде ресурса... Вот как я могу такой индикатор засветить без согласия? А спрашивать нет желания. Да в общем-то мне и индикатор не нужен. Мне вчера в голову пришла СМСка с решением проблемы с дополнительным советником без индикатора. Сейчас это в стадии обсуждения. В крайнем случае, меня и заказ-то не очень держит... Просто нарвался на проблему, пытаюсь сообщить о ней разработчикам.
 
Maxim Kuznetsov:

крах может быть и внутри OnInit....и даже в начале OnCalculate

он-же крах, ему можно всех опережать :-)

попробуйте отключить оптимизацию. И наставить принтов.

если вы говорите что в дебаге оно работает всегда, а при обчном запуске валится с историей.

Да нет. У него DebugBreak() сразу после поднятия в стек вызовов OnInit()-а. Поэтому крах до него.

По поводу памяти. Я уже писал, что программа пытается обратиться по адресу 0x04 и ОС абсолютно правильно его валит (или проц, тут доки читать надо), так как первые N (тут тоже доки надо читать) адресов памяти запрещены к использованию. именно для того, что бы определять разыменование нулевого указателя.

mov rdx, [0x4] - означает, поместить данные (8 байт), хранящиеся по адресу 0х4 в регистр процессора rdx,

test rdx,rdx - побитовое И двух значений, так как данные, находящиеся в rdx, сравниваются сами с собой, то это проверка на 0, если в rdx битовый 0, то в регистр zf помещается 1, иначе 0.

jz 0x3c5184a - если zf==1 (в rdx битовый 0), то перейти к инструкции, находящейся по адресу 0х3c5184a

add rdx, 0xf4 - к значению, находящемуся в rdx прибавить 0xf4 (244), при этом, если регистр zf принимает значение 1 если результат сложения 0 и 0 если не 0.

jz 0x3c5184a - смотри выше.

dec dword[rdx+0x4] - уменьшить значение 4-х байтового числа, хранящегося по адресу (значение, хранящееся в rdx + 4) на 1. Опять же регистр zf принимает значение в зависимости от результата операции по той же логике.

jnz 0x3c5184a  - если zf==0, перейти к инструкции, находящейся по адресу 0х3c5184a


Вот, как это исполняется на процессоре. Учитывая, что отправляют нас к выполнению на один и тот-же адрес, скорее всего это функция. А дальше сам уже думай или код давай.

Причина обращения: