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

Во время симуляции вашего тестового файла MATLAB® Coder™ приложение обнаруживает мертвый код или код, который является постоянным свернутым. Приложение использует информацию о покрытии кода при переводе вашего кода из кода MATLAB с плавающей точкой в код MATLAB с фиксированной точкой. Просмотр результатов покрытия кода помогает вам проверить, что ваш тестовый файл выполняет алгоритм адекватно.

Приложение вставляет встроенные комментарии в код с фиксированной точкой, чтобы отметить мертвые и непереведенные области. Она включает информацию о покрытии кода в сгенерированный HTML преобразования с фиксированной точкой. Редактор приложений отображает маркированную цветом полосу слева от кода. В этой таблице описывается расцветка.

Цвет полосы покрытияУказывает
Зеленый

Одна из следующих ситуаций:

  • Функция точки входа выполняется несколько раз, и код выполняет более одного раза.

  • Функция точки входа выполняется один раз, а код - один раз.

Различные оттенки зеленого цвета указывают на различные области значений отсчётов выполнения линии. Самый темный оттенок зелёного цвета указывает на наивысшую область значений.

ОранжевыйФункция точки входа выполняется несколько раз, но код выполняет один раз.
КрасныйКод не выполняется.

Что такое Мертвый Код?

Мертвый код - это код, который не выполняется во время симуляции. Мертвый код может быть результатом следующих сценариев:

  • Защитный код, содержащий целевые угловые случаи, которые не достигнуты

  • Человеческая ошибка в коде, приводящая к коду, который не может быть достигнут каким-либо путем выполнения

  • Неадекватная область значений испытательных стендов

  • Постоянное складывание

Обнаружение мертвого кода

В этом примере показано, как обнаружить мертвый код в вашем алгоритме с помощью приложения MATLAB Coder.

  1. В локальной папке с возможностью записи создайте функцию myFunction.m.

    function y = myFunction(u,v)
        %#codegen
        for i = 1:length(u)
            if u(i) > v(i)
                y=bar(u,v);
            else
                tmp = u;
                v = tmp;
                y = baz(u,v);
            end
        end
    end
    
    function y = bar(u,v)
        y = u+v;
    end
    
    function y = baz(u,v)
        y = u-v;
    end
    
  2. В той же папке создайте тестовый файл, myFunction_tb.

    u = 1:100;
    v = 101:200;
    
    myFunction(u,v);
    
  3. Из галереи Apps откройте приложение MATLAB Coder.

  4. Установите Numeric Conversion значение Convert to fixed point.

  5. На странице Select Source Files перейдите к myFunction файл и нажатие кнопки Open.

  6. Нажмите Next. На странице Define Input Types выберите созданный тестовый файл myFunction_tb. Нажмите Autodefine Input Types.

  7. Нажмите Next. На странице Check for Run-Time Issues нажмите Check for Issues.

    Приложение запускает myFunction_tb тестовый файл и не обнаруживает проблем.

  8. Нажмите Next. На странице Convert to Fixed-Point щелкните Analyze, чтобы симулировать функции точки входа, собрать информацию о области значений и получить предложенные типы данных.

    Строка цветового кодирования в левой части окна редактирования указывает, выполняется ли код. Код в первом условии оператора if не выполняется во время симуляции, потому что u никогда не больше v. The bar функция никогда не выполняется, потому что оператор if никогда не выполняется. Эти части алгоритма отмечены красной полосой, что указывает на то, что они являются мертвым кодом.

  9. Чтобы применить предложенные типы данных к функции, нажмите Convert.

    Приложение MATLAB Coder генерирует функцию с фиксированной точкой, myFunction_fixpt. Сгенерированный код с фиксированной точкой содержит комментарии вокруг частей кода, идентифицированных как мертвый код. На панели Validation Results предлагается использовать более тщательный испытательный стенд.

    Когда приложение MATLAB Coder обнаружит мертвый код, рассмотрите редактирование вашего тестового файла, чтобы ваш алгоритм выполнялся во всей его области значений. Если ваш тестовый файл уже отражает полную область значений входных переменных, рассмотрите редактирование вашего алгоритма, чтобы исключить мертвый код.

  10. Закройте приложение MATLAB Coder.

Исправление мертвого кода

  1. Отредактируйте тестовый файл myFunction_tb.m включать более широкую область значений входов.

    u = 1:100;
    v = -50:2:149;
    
    myFunction(u,v);
    

  2. Откройте приложение MATLAB Coder.

  3. Используя ту же функцию и отредактированный тестовый файл, повторите процесс преобразования.

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

    Чтобы завершить процесс преобразования и преобразовать функцию в фиксированную точку, нажмите Convert.