Если вы сталкиваетесь с ошибками времени выполнения в своих функциях 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