2011-01-13 12 views
6

Mam złożony projekt MATLAB-Simulink obejmujący wiele plików m i plików mdl. Niektóre pliki m definiują zmienne, które są używane w innych plikach m (zły projekt, wiem, ale jest to starszy kod). Istnieją również funkcje, które nie są już używane.Znajdź nieużywane zmienne i funkcje w projekcie MATLAB-Simulink

Potrzebuję automatycznego sposobu na znalezienie nieużywanych zmiennych i funkcji, dzięki czemu mogę je usunąć i uczynić całość mniej skomplikowaną. Idealnie powinienem mieć skrypt/narzędzie, które pobiera jako dane wejściowe nazwę katalogu głównego projektu, skanuje wszystkie pliki w podkatalogach i wyprowadza wszystkie zmienne i funkcje, które nie są używane w żadnym pliku m lub pliku mdl.

Wiem, że mogę znaleźć zmienne, które nie są używane w plikach mdl (patrz Tips and Tricks - Tracking Variables in a Simulink Model). Chciałbym zastosować tę metodę do wszystkich plików w projekcie.

Mój pomysł na wykrywanie zmiennych nie używanych w m-plikach polega na tymczasowym połączeniu wszystkich plików m w jeden plik i uruchomieniu na nim mlint. Jakieś lepsze pomysły?

Odpowiedz

7

Zamiast przechodzenia przez żmudne (i potencjalnie podatne na błędy) zadanie wklejając wszystkie swoje M-Files w jednym uruchomić MLINT, masz kilka innych opcji ...

Jeśli masz wszystkie pliki w jednym folderze, najprostszym sposobem jest przejście do przeglądarki folderów bieżących, kliknięcie przycisku Actions, a następnie wybranie opcji Raporty> Raport z analizy kodu.

alt text

Otworzy się nowe okno wyświetlania wyników MLINT dla każdego m-pliku w bieżącym katalogu:

alt text

Jeśli wolisz zautomatyzowania procesu za pomocą skryptu zamiast po kliknięciu opcji menu, jest kilka zgłoszeń w MathWorks File Exchange (here i here), które wydają się pracować rekurencyjnie na strukturze katalogów, a nie tylko na jednym katalogu.

W dodatkowych, oto niektóre przykładowy kod, który będzie robić to, co chcesz za jednym katalogu:

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 

Można rozszerzyć zbiór nazw plików (i ścieżek) w ten sposób, aby operate recursively on a directory tree, a następnie uruchomić MLINT na wynikowym zbiorze zbieranych plików.

+1

Dzięki, ale dotyczy to tylko części problemu. Załóżmy, że mam dwa pliki f1.m i f2.m. f1.m jest następujący: a = 5; b = 3; f2 jest następujące: c = a * 2; b nie jest używane, ale raport o analizatorze kodu tego nie mówi. – Samil

+0

@Samil: To jest problem, ponieważ nie są to [funkcje] (http://www.mathworks.com/help/techdoc/ref/function.html), są to [skrypty] (http: // www. .mathworks.com/help/techdoc/ref/script.html). Ponieważ skrypt może być uruchamiany w dowolnym obszarze roboczym i nie wiadomo, które zmienne będą już obecne w tym obszarze roboczym lub które zmienne ze skryptu będą następnie używane przez inny skrypt lub funkcję, może być konieczne połączenie wszystkich plików skryptów razem jakoś skutecznie uruchomić MLINT. Nie mogę myśleć o innym sposobie obchodzenia się ze skryptami. – gnovice

Powiązane problemy