Encuentra las variables y funciones no utilizadas en un proyecto de MATLAB-Simulink

StackOverflow https://stackoverflow.com/questions/4678085

  •  10-10-2019
  •  | 
  •  

Pregunta

Tengo un proyecto de MATLAB-Simulink complejo que involucra muchos m-archivos y MDL-archivos. Algunos-m archivos definen las variables que se utilizan en otros archivos-m (mal diseño, lo sé, pero es el código heredado). También hay funciones que no se utilizan más.

necesito una manera automática para encontrar las variables y funciones no utilizadas de modo que pueda eliminarlos y hacer que todo sea un poco menos compleja. Idealmente debería tener un script / herramienta que toma como entrada el nombre del directorio raíz del proyecto, analiza todos los archivos en los subdirectorios, y da salida a todas las variables y funciones que no se utilizan en ningún archivo-m o MDL-archivo.

Yo sé que puedo encontrar variables que no se utilizan en MDL-archivos (ver Consejos y trucos -? Seguimiento de variables en un modelo Simulink ). Me gustaría aplicar este método a todos los archivos en el proyecto.

Mi idea para detectar las variables que no se utilizan en archivos-m es combinar temporalmente todos los archivos-m en un solo archivo y ejecutar mlint en él. Cualquier ideas mejores?

¿Fue útil?

Solución

En lugar de pasar por la tediosa (y potencialmente propenso a errores) tarea de pegar todos sus archivos-m en una sola para ejecutar MLINT , que tiene algunas otras opciones ...

Si usted tiene todos sus archivos en una carpeta, lo más sencillo es ir al navegador carpeta actual, haga clic en el menú Acciones texto alternativo ??y seleccione Informes> Analizador de Código informe .

text alt

Esto abrirá una nueva ventana que muestra los resultados MLINT para cada archivo-m en el directorio actual:

text alt

Si prefiere automatizar el proceso utilizando un script en lugar de tener que hacer clic a través de las opciones del menú, hay un par de presentaciones en la MathWorks archivo de intercambio ( aquí y aquí ) que parecen funcionar de forma recursiva en una estructura de directorios en lugar de sólo un único directorio.

En adicional, aquí algunos ejemplos de código que va a hacer lo que quiere para un solo directorio:

dirData = dir;                 %# Get data on the current directory contents
fileIndex = ~[dirData.isdir];                 %# Get an index for the files
fileNames = {dirData(fileIndex).name};        %# Get the file names
[~,~,ext] = cellfun(@fileparts,fileNames,...  %# Get the file extensions
                    'UniformOutput',false);
mFileIndex = strcmp(ext,'.m');                %# Get an index for the m-files
cellfun(@mlint,fileNames(mFileIndex));        %# Run MLINT on each m-file

Se podría ampliar la colección de nombres de archivo (y caminos) de esta manera a operan de forma recursiva en un árbol de directorios, a continuación, ejecute MLINT en el resultado conjunto de archivos que recogen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top