Проверяйте файлы кода MATLAB на возможные проблемы
Примечание
mlint
не рекомендуется. Использование checkcode
вместо этого.
Для получения информации об использовании графического интерфейса пользователя к Анализатору кода смотрите Проверку кода для Ошибок и Предупреждений Используя Анализатор кода.
mlint('filename')
mlint('filename','-config=settings.txt')
mlint('filename','-config=factory')
inform=mlint('filename','-struct')
msg=mlint('filename','-string')
[inform,filepaths]=mlint('filename')
inform=mlint('filename','-id')
inform=mlint('filename','-fullpath')
inform=mlint('filename','-notok')
mlint('filename','-cyc')
mlint('filename','-codegen')
mlint('filename','-eml')
mlint('filename')
отображения обмениваются сообщениями о filename
тот отчет потенциальные проблемы и возможности для улучшения кода. Эти сообщения иногда упоминаются, когда Анализатор кода обменивается сообщениями. Номер строки в сообщении является гиперссылкой, по которой можно кликнуть, чтобы перейти непосредственно к той линии в Редакторе. Точный текст mlint
сообщения подвергаются некоторому изменению между версиями.
Задайте filename
как один или несколько векторов символов или строковых массивов, или как массив ячеек из символьных векторов. Если filename
задает несколько векторов символов или строковых массивов, или если filename
нескалярный массив строк или массив ячеек из символьных векторов, MATLAB® информация об отображениях для каждого файла. Вы не можете объединить массивы ячеек из символьных векторов и векторы символов имен файлов. Например, у вас не может быть {'lengthofline', 'buggy'}, 'collatz'
как вход.
mlint('filename','-config=settings.txt')
заменяет активный файл настроек по умолчанию с настройками, которые включают или подавляют сообщения, как обозначено в заданном settings.txt
файл.
Примечание
Если используется, необходимо задать полный путь к settings.txt
файл задан с -config
опция.
Для получения информации о создании settings.txt
файл, смотрите, Сохраняют настройки сообщения анализатора кода и использовать их снова. Если вы задаете недопустимый файл, mlint
возвращает сообщение, указывающее, что оно не может открыть или считать файл, который вы задали. В этом случае, mlint
использует настройки заводской настройки.
mlint('filename','-config=factory')
игнорирует все файлы настроек и использует настройки настройки заводской настройки.
inform=mlint('filename','-struct')
возвращает информацию в массиве структур, длина которого является количеством найденных сообщений. Структура имеет поля, которые следуют.
Поле | Описание |
---|---|
| Сообщение, описывающее подозрительное построение тот анализ кода, отловлено. |
| Вектор из номеров строки файла, к которым относится сообщение. |
| Массив 2D столбца столбцов файла (степени столбца), к которому применяется сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. Существует одна строка в массиве 2D столбца для каждого вхождения сообщения. |
Если вы задаете несколько имен файлов, как введено, inform
содержит массив ячеек структур.
msg=mlint('filename','-string')
возвращает информацию как вектор символов msg
. Если вы задаете несколько имен файлов, как введено, msg
содержит информацию для каждого файла, разделенного 10 символами знака "равно" (=
), пробел, имя файла, пробел и 10 символов знака "равно".
Если вы не используете -struct
или -string
аргумент и вы задаете выходной аргумент, поведением по умолчанию является -struct
. Если вы не используете аргумент и нет никаких выходных аргументов, поведение по умолчанию должно отобразить информацию к командной строке.
[inform,filepaths]=mlint('filename')
дополнительно возвращает filepaths
, абсолютные пути к именам файлов, в том же порядке, когда вы задали их.
inform=mlint('filename','-id')
запрашивает идентификатор сообщения, где ID является вектором символов формы ABC...
. Когда возвращено в структуру, выход также имеет id
поле, которое является ID, сопоставленным с сообщением.
inform=mlint('filename','-fullpath')
принимает, что входные имена файлов являются абсолютными путями, так, чтобы mlint
не пытается определить местоположение их.
inform=mlint('filename','-notok')
запуски mlint
для всех линий в filename
, даже те линии, которые заканчиваются mlint
директива подавления, %#ok
.
mlint('filename','-cyc')
отображает сложность Маккейба (также называемый цикломатической сложностью) каждой функции в файле. Более высокие значения сложности Маккейба указывают на более высокую сложность, и существует некоторое доказательство, чтобы предположить, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. В общем случае меньшие значения сложности указывают на программы, которые легче изучить и изменить. Некоторые люди защищают разделять программы, которые имеют сложность, оценивающую более чем 10.
mlint('filename','-codegen')
включает сообщения генерации кода для отображения в Командном окне.
mlint('filename','-eml')
'-eml'
не рекомендуется. Используйте '-codegen'
вместо этого.
Следующие примеры используют lengthofline.m
, который является файлом примера с кодом MATLAB, который может быть улучшен. Можно найти его в matlabroot
/help/techdoc/matlab_env/examples
. Если вы хотите запустить примеры, сохраните копию lengthofline.m
к местоположению на вашем пути MATLAB.
Запускать mlint
на файле в качестве примера, lengthofline.m
запущенный
mlint('lengthofline')
MATLAB отображает сообщения M-Lint для lengthofline.m
в Командном окне:
L 22 (C 1-9): The value assigned here to variable 'nothandle' might never be used. L 23 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 24 (C 5-11): 'notline' might be growing inside a loop. Consider preallocating for speed. L 24 (C 44-49): Use STRCMPI(str1,str2) instead of using LOWER in a call to STRCMP. L 28 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 34 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed. L 34 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. Type 'doc struct' for more information. L 38 (C 29): Use || instead of | as the OR operator in (scalar) conditional statements. L 39 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements. L 40 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements. L 42 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed. L 43 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed. L 45 (C 13-15): 'dim' might be growing inside a loop.Consider preallocating for speed. L 48 (C 52): There may be a parenthesis imbalance around here. L 48 (C 53): There may be a parenthesis imbalance around here. L 48 (C 54): There may be a parenthesis imbalance around here. L 48 (C 55): There may be a parenthesis imbalance around here. L 49 (C 17): Terminate statement with semicolon to suppress output (in functions). L 49 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.
Для получения дополнительной информации об этих сообщениях и как улучшить код, см. Код Изменения На основе сообщений Анализатора кода в Инструментах Рабочего стола MATLAB и документации Среды разработки.
Сохранить результаты к структуре и включать идентификаторы сообщений, запуск
inform=mlint('lengthofline', '-id')
MATLAB возвращается
inform = 19x1 struct array with fields: message line column id
Видеть значения для первого сообщения, запуска
inform(1)
Отображения MATLAB
ans = message: 'The value assigned here to variable 'nothandle' might never be used.' line: 22 column: [1 9] id: 'NASGU'
Здесь, сообщение для значения, которое появляется на линии 22, который расширяет из столбца 1-9 в файле. NASGU
ID для сообщения 'The value assigned here to variable 'nothandle' might never be used.'
.
Чтобы отобразить сложность Маккейба файла кода MATLAB, запустите mlint
с -cyc
опция, как показано в следующем примере (принимающий вас имеют сохраненный lengthofline.m
к локальной папке).
mlint lengthofline.m -cyc
Результаты, отображенные в Командном окне, показывают сложность Маккейба файла, сопровождаемого сообщениями M-Lint, как показано здесь:
L 1 (C 23-34): The McCabe complexity of 'lengthofline' is 12. L 22 (C 1-9): The value assigned here to variable 'nothandle' might never be used. L 23 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 24 (C 5-11): 'notline' might be growing inside a loop. Consider preallocating for speed. L 24 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP. L 28 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)). L 34 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed. L 34 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD. Type 'doc struct' for more information. L 38 (C 29): Use || instead of | as the OR operator in (scalar) conditional statements. L 39 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements. L 40 (C 47): Use || instead of | as the OR operator in (scalar) conditional statements. L 42 (C 13-16): 'data' might be growing inside a loop. Consider preallocating for speed. L 43 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed. L 45 (C 13-15): 'dim' might be growing inside a loop. Consider preallocating for speed. L 48 (C 52): There may be a parenthesis imbalance around here. L 48 (C 53): There may be a parenthesis imbalance around here. L 48 (C 54): There may be a parenthesis imbalance around here. L 48 (C 55): There may be a parenthesis imbalance around here. L 49 (C 17): Terminate statement with semicolon to suppress output (in functions). L 49 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.
Для получения информации о директиве подавления, %#ok
, и подавление сообщений из вашей программы, смотрите, Настраивают, Анализатор кода передают Индикаторы и сообщения.