Отладьте ошибки времени выполнения

Если вы сталкиваетесь с ошибками времени выполнения в своих функциях MATLAB®, стек этапа выполнения появляется в окне команды MATLAB. Используйте сообщение об ошибке и данные стека, чтобы узнать больше об источнике ошибки, и затем или устранить проблему или добавить код обработки ошибок. Для получения дополнительной информации см. Просмотр ошибок в стеке этапа выполненияОбработка ошибок времени выполнения.

Просмотр ошибок в стеке этапа выполнения

О стеке этапа выполнения

Стек этапа выполнения включен по умолчанию для генерации кода MEX из MATLAB. Чтобы узнать больше об источнике ошибки, используйте сообщение об ошибке и следующие данные стека:

  • Имя функции, которое сгенерировало ошибку

  • Номер строки предпринятой операции

  • Последовательность вызовов функции, которые привели к выполнению функции и линии, в которой произошел каждый из этих вызовов функции

Трассировка Стека этапа выполнения в качестве примера.  Этот пример показывает трассировку стека этапа выполнения для MEX-функции mlstack_mex:

mlstack_mex(-1)
Index exceeds matrix dimensions.  Index
value -1 exceeds valid range [1-4] of
array x.

Error in mlstack>mayfail (line 31)
y = x(u);

Error in mlstack>subfcn1 (line 5)
switch (mayfail(u))

Error in mlstack (line 2)
y = subfcn1(u);

Трассировка стека предоставляет следующую информацию:

  • Тип ошибки.

    ??? Index exceeds matrix dimensions.
    Index value -1 exceeds valid range [1-4] of array x.

  • Где ошибка произошла.

    Error in ==>mlstack>mayfail at 31
    y = x(u);

  • Последовательность вызова функции до отказа.

    Error in ==> mlstack>subfcn1 at 5
    switch (mayfail(u))
    
    Error in ==> mlstack at 2
    y = subfcn1(u);

Когда использовать стек этапа выполнения

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

Отключите Стек этапа выполнения.  Можно отключить стек этапа выполнения путем отключения проверок целостности памяти как описано в том, Как Отключить Проверки на этапе выполнения.

Внимание

Прежде, чем отключить проверки целостности памяти, проверьте, что все границы массивов и проверка размерности являются ненужными.

Обработка ошибок времени выполнения

Генератор кода распространяет ошибочные идентификаторы. Если вы выдаете ошибку или предупреждение в вашем коде MATLAB, используйте try-catch оператор в вашем коде испытательного стенда, чтобы исследовать информацию об ошибке и попытаться восстановиться, или вымыться и прерваться. Например, для функции в Трассировке Стека этапа выполнения В качестве примера, создайте тестовый скрипт, содержащий:

try
    mlstack_mex(u)
catch
    % Add your error handling code here
end
Для получения дополнительной информации смотрите Оператор попытки/выгоды (MATLAB).