exponenta event banner

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

Во время моделирования тестового файла приложение 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. В галерее приложений откройте приложение MATLAB Coder.

  4. Задать числовое преобразование в Convert to fixed point.

  5. На странице «Выбор исходных файлов» перейдите к myFunction и нажмите кнопку «Открыть».

  6. Нажмите кнопку Далее. На странице Define Input Types выберите созданный тестовый файл. myFunction_tb. Щелкните Автоопределить типы ввода (Autodefine Input Types).

  7. Нажмите кнопку Далее. На странице Проверить наличие проблем во время выполнения щелкните Проверить наличие проблем.

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

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

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

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

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

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

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

Исправить мертвый код

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

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

  2. Снова откройте приложение MATLAB Coder.

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

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

    Чтобы завершить процесс преобразования и преобразовать функцию в фиксированную точку, щелкните Преобразовать (Convert).