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

Если вы столкнулись с ошибками времени выполнения в MATLAB® functions, run-time stack появится в командном окне 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 оператор в коде испытательного стенда, чтобы изучить информацию об ошибке и попытаться восстановить, или очистить и прервать. Для примера, для функции в Пример Run-Time Стека Trace, создайте тестовый скрипт, содержащий:

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