exponenta event banner

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

При возникновении ошибок времени выполнения в функциях 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
Дополнительные сведения см. в разделе Инструкция try/catch.