Ошибки, баги, вопросы - страница 2759

 
Баг в дебагере МТ5 (build 2450) некорректное срабатывание установленных вручную точек останова:
void test(){
   if(false){
      int i = 1;      // вручную установленная точка останова
   }   
}                     // место срабатывания точки останова при отладке

void OnStart(){
   test();   
}


UPD:
Спасибо за критику, вернулся к изначальному проекту и выделил возникшую проблему без переоптимизаций кода:
class A{
public:
   bool m_flag;
   A* m_next;
   A(bool flag) : m_flag(flag){}
   
   void test(){
      if(m_flag){
         printf("1");
         m_next = m_next;    // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart(){
  {A a(false); a.test();}   // Result: breakpoint              Expected result: 
  {A a(true);  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}
 
Sergey Dzyublik:
Баг в дебагере МТ5 (build 2450) некорректное срабатывание установленных вручную точек останова:

Объясните пожалуйста, зачем так извращаться?

if(false)
Вы пользуетесь отладкой?
 
Sergey Chalyshev:

Объясните пожалуйста, зачем так извращаться?

Вы пользуетесь отладкой?

Код демонстрирует БАГ, где в условие зайти нельзя, но все-равно срабатывает точка останова, при этом совсем в другом месте кода.
Еще вопросы?

 

Написал в службу поддержи открытия следующее сообщение.

Тестировал робота на истории. Получил странные результаты. На скрине нижняя часть таблицы. Если учесть, что торговля ведётся с 100.000 рублями, отрицательный баланс -6049 при просадке 17% кажется неправдоподобным. Действительно, когда я открываю график тестирования этого набора параметров, получаю положительный баланс при указанной просадке. Счёт реальный 75287 (что видно на фото). В чём может быть причина такого поведения программы?

Ещё могу добавить, что такое поведение у всех наборов параметров.

Получил ответ:

К сожалению, подобного рода вопросы не в компетенции технической поддержки.

Просьба обращаться к разработчикам терминала.

В чём может быть причина?

 
Sergey Dzyublik:

Код демонстрирует БАГ, где в условие зайти нельзя, но все-равно срабатывает точка останова, при этом совсем в другом месте кода.
Еще вопросы?

Мне кажется всё правильно. Программа игнорирует if(false) и срабатывает на ближайшем по коду месте.)

 
TraSer:

Мне кажется всё правильно. Программа игнорирует if(false) и срабатывает на ближайшем по коду месте.)

Совершенно не правильно. Если мне надо остановиться только при выполнении условия, а остановка будет на каждом тике, то я с ума свихнусь пока...

 
Sergey Dzyublik:

Еще вопросы?

с чего Вы решили, что компилятор не выбросил текст условия if(false) {....} при компиляции проекта ?

точка останова получилась на первом текстовом символе МЕ оставшегося кода, т.к. МЕ не умеет сдвигать строки, фолдинги пр. прелести VS

ME не умеет в режиме реального времени анализировать код, максимум, что доступно автоподстановки 

хотя если  баг, значит баг

 
Igor Makanu:

с чего Вы решили, что компилятор не выбросил текст условия if(false) {....} при компиляции проекта ?

точка останова получилась на первом текстовом символе МЕ оставшегося кода, т.к. МЕ не умеет сдвигать строки, фолдинги пр. прелести VS

ME не умеет в режиме реального времени анализировать код, максимум, что доступно автоподстановки 

хотя если  баг, значит баг

Это надо тестировать с нормальным условием. Я вот такое получил недавно: при пошаговом выполнении кода

  if(desiredProfit > 0 && summProfit > desiredProfit)
   {
    CloseAllPosition();
    DeleteAllPending();
    openSeries = Should_I_open;
    return;
   }

в отладчике, при явном невыполнении условия, вызовы функций не выполнялись, а вот return; выполняется. Я решил, что поскольку после кривой скобки нет больше кода, там только ещё одна кривая скобка завершающая void OnTick(), то компилятор перенёс return

 
Alexey Viktorov:

Это надо тестировать с нормальным условием.

да, я про это и пишу, не false нужно, а что нибудь как:

int i=1;
if(--i == 0)...

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

 
Спасибо за критику, вернулся к изначальному проекту и выделил возникшую проблему без переоптимизаций кода:
class A{
public:
   bool m_flag;
   A* m_next;
   A(bool flag) : m_flag(flag){}
   
   void test(){
      if(m_flag){
         printf("1");
         m_next = m_next;    // Вручную установленная точка останова срабатывает как для false так и true условий
         //m_next = &this;   // Ok
      }   
   }
};

void OnStart(){
  {A a(false); a.test();}   // Result: breakpoint              Expected result: 
  {A a(true);  a.test();}   // Result: printf + breakpoint     Expected result: printf + breakpoint
}
Причина обращения: