Проверьте файлы кода MATLAB на возможные проблемы
mlint
не рекомендуется. Использование контрольного кода вместо этого.
Для получения информации об использовании графического интерфейса пользователя к Анализатору кода смотрите Контрольный код для Ошибок и Предупреждений.
mlint ('имя файла')
mlint ('имя файла', '-config=settings. txt
mlint ('имя файла', '-config=factory')
inform=mlint ('имя файла', '-struct')
msg=mlint ('имя файла', '-строка')
[сообщите, filepaths] =mlint ('имя файла')
inform=mlint ('имя файла', '-id')
inform=mlint ('имя файла', '-полный-путь')
inform=mlint ('имя файла', '-notok')
mlint ('имя файла', '-cyc')
mlint ('имя файла', '-codegen')
mlint ('имя файла', '-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')
возвращает информацию в массиве структур, длина которого является количеством найденных сообщений. Структура имеет поля, которые следуют.
Поле | Описание |
---|---|
| Сообщение, описывающее подозрительное построение тот анализ кода, отловлено. |
| Вектор номеров строки файла, к которым относится сообщение. |
| Массив двух-столбца столбцов файла (степени столбца), к которому применяется сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. Существует одна строка в массиве двух-столбца для каждого возникновения сообщения. |
Если вы задаете несколько имен файлов, как введено, 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
и подавляющие сообщения из вашей программы, Настраивают, Анализатор кода передают Индикаторы и сообщения.