AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Unit-Abhängigkeiten visualisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unit-Abhängigkeiten visualisieren

Ein Thema von grizzly · begonnen am 17. Jul 2006 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Seite 3 von 4     123 4      
grizzly
Registriert seit: 10. Dez 2004
Nachtrag vom 21.03.2008
Habe vorige Woche festgestellt, daß UnitUsage 0.5 mit den allerneusten DOT Versionen nicht mehr richtig zusammenarbeitet. DOT.exe hat scheinbar das Format seiner temporären Ausgabe-Dateien leicht verändert.
Ich habe deswegen mal einen kleinen Hot-Fix gebastelt.

Leider bin ich noch nicht dazugekommen, alle von Gruber_Hans_12345 vorgeschlagenen Änderungen aufzunehmen. Somit bringt die 0.6 nur folgende neue Features:
- Läuft mit der momentan aktuellen DOT.exe
- WMF-Export und Drucken leicht verbessert (Die alte Version verschluckte manchmal Linien am Rand)
- Hervorhebung von Units deren Source-Code neuer ist als ein vorgegebenes Datum
- Einige Kleinigkeiten auf der Oberfläche (vermutlich mit neuen Bugs)

Source und binaries wie üblich hier: UnitUsage. (Hier gibt es auch noch die alte 0.5)

und im Anhang.


---- Ursprünglicher ursprünglicher Text --------------------------------------
Nachtrag vom 12.03.2007
UnitUsage ist nun bei Version 0.5 angelangt. Ein paar kleine Verbesserungen hat es gegeben (aber leider nichts weltbewegendes).
Binaries, Screenshot und Kurzbeschreibung gibt es nach wie vor hier im Anhang. Sourcecode (in seiner ursprünglichen Häßlichkeit) gibt's auf der zugehörigen Webseite von UnitUsage.

---- Ursprünglicher Text (Links erneuert) --------------------------------------
Erst kürzlich gab es einen Thread mit einem Programm zur Visualisierung von Unit-Abhängigkeiten unter Zuhilfenahme von GraphViz.
Genau soetwas hatte ich vor längerer Zeit auch schon begonnen und dann in meiner Firma ein wenig weitergepflegt.
UnitUsage ist nicht perfekt. Es kann auch nicht analysieren, welche Units gar nicht verwendet werden (da gibt es eh schon genug Tools dafür).
Die Stärke von UnitUsage ist das bequeme Browsen mittels Maus-Klick innerhalb der Unit-Verknüpfungen:

Screenshot siehe Anhang

Ich stelle UnitUsage mal hier in der Freeware-Abteilung vor, werde es aber Open-Source machen, sobald ich den Source-Code soweit aufgeräumt habe, daß ich mich nicht mehr allzusehr genieren muß

Eine notdürftige Bedienungsanleitung findet sich hier: PDF 400KB (Die hat's bitter nötig, weil das User-Interface ist ein wenig sonderbar)

Unit-Usage 0.5 gibt es gezippt hier: ZIP 430KB
(Verwenden auf eigene Gefahr. Braucht's hier einen Disclaimer?)

Bei der Code-Analyse berücksichtigt UnitUsage zwar Compiler-Direktiven und Switches (auch so Zeug wie $ifopt etc...), liest auch Include-Dateien, kommt aber mit einigen neuen Konstrukten (Wie z.B. {$IF...} ) nicht zurecht. Units mit solchen Compiler-Direktiven werden dann ohne "Child"-Units angezeigt.

Nicht vergessen: Um UnitUsage zu verwenden benötigt ihr dot.exe von www.graphviz.org. Das ist das Teil, was den Löwenanteil der Arbeit übernimmt.

Gruß
Michael

[edit=sakura] Der ScreenShot reicht als Anhang und muss nicht gleichzeitig im Text gepostet werden. Mfg, sakura[/edit]
Miniaturansicht angehängter Grafiken
unitusage_06_screenshot_106.gif  
Angehängte Dateien
Dateityp: pdf unitusage_einleitung_108.pdf (388,4 KB, 96x aufgerufen)
Dateityp: zip unitusage_0_6_source_125.zip (143,7 KB, 99x aufgerufen)
Dateityp: zip unitusage_0_6_executable_605.zip (426,1 KB, 124x aufgerufen)
 
grizzly

 
Delphi XE4 Professional
 
#21
  Alt 16. Feb 2007, 11:06
UnitUsage OpenSource zu machen war von Anfang an meine Absicht. Allerdings wollte ich das in der momentanen Verfassung des Source-Codes nicht tun, viel zu peinlich. Ich habe sogar schon angefangen, den Code zu überarbeiten, muß allerdings gestehen, daß ich mangels Zeit noch nicht weit gekommen bin, und zu allem Überfluß das Programm in der neuen Form gar nicht mehr richtig funktioniert. (Oh Gott, hab ich noch mein altes Archiv?) Also eigentlich müßte ich es von Grund auf neu schreiben, korrigieren hilft da schon gar nicht mehr.

Lange Rede, kurzer Sinn: Ich habe gestern beschlossen, UnitUsage demnächst in der ursprünglichen Grusel-Form freizugeben. Nur noch sauber einpacken
(Aber man darf mich gerne wieder dran erinnern, falls sich in drei Wochen immer noch nichts getan hat...)

Gruß
Michael
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#22
  Alt 26. Feb 2007, 11:05
hi grizzly,

sind zwar noch keine 3 wochen vorbei, aber frage trotzdem schon mal nach
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#23
  Alt 26. Feb 2007, 13:36
Ich habe mittlerweile meinen alten Source-Code Stand vor meinen Aufräum-Aktionen ausgegraben (uff!) und bin schon dabei, die schlimmsten Sachen auszumerzen. Bei den Sachen, die ich noch kapiere, schreib ich auch noch ein wenig Kommentar rein.
Richtig Aufräumen schaffe ich leider nicht. Design und Architektur lassen sich halt nicht nachträglich einbauen

Es sollte also klappen, die drei Wochen werde ich vermutlich nur knapp verfehlen. Noch'n bissl Geduld. Gut Ding will Weile haben. Und UnitUsage auch....

Gruß
Michael
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#24
  Alt 9. Mär 2007, 07:39
*push*

Zitat von grizzly:
(Aber man darf mich gerne wieder dran erinnern, falls sich in drei Wochen immer noch nichts getan hat...)
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#25
  Alt 12. Mär 2007, 10:32
Timeline nur knapp gerissen. Version 0.5 ist "fertig". Siehe ersten Eintrag dieses Threads.

Gruß
Michael
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#26
  Alt 12. Mär 2007, 11:26
perfekt danke super

hab auch gleich mal 3 kleine änderungen ...


Änderung 1 :
Delphi-Quellcode:
DelDirective (Zeile 1262)
                        IF KnownDirective('I') or KnownDirective('INCLUDE') THEN { Include files }
                            Result := ProcessInclude(ActiveCDirPara); // Recursive call!
Habe diese zwei zeilen in die (IF CompDirValid then) gesetzt, da sonst auch $I berücksichtigt werden, die eigentlich nicht sollten


Änderung 2
Delphi-Quellcode:
DelDirective (Zeile 955)
                        (Long:'HINTS'; Short:' '),
                        (Long:'STACKCHECKS'; Short:' '),
HINTS und STACKCHECKS hinzugefügt zum array Directive


Änderung 3


Delphi-Quellcode:
DelDirective (Zeile 1239)
                             IF not b THEN
                               BEGIN
                                 b := DefList.Find(InvertCompDir(#1+ActiveCDirPara), i); // Check, if inverted compiler directive is known
                                 (*
                                IF not b then
                                  begin
                                    Result := -4;
                                    CreateErrorMsg(ErrMsg, SourceFileName, Row, 'Compiler switch '+ copy(ActiveCDirPara, 1, Length(ActiveCDirPara)-1) + ' not specified');
                                  end;
                                   *)

                               END;
Hab das not mal auskommentiert, warum muß die compilerdirektive als - da sein ?
wenn ich schreibe {$IFOPT C+} und C+ nicht gefunden wurde, dann ist die IFOPT ungültig und sollte nicht geparst werden oder ? (und es muß keine C- gesetzt sein oder?


so, mein erstes projekt kann er jetzt mal ohne probs parsen, mal mein großes testen ...


hab auch mal die zwei units (für BuildGraph) mit einer cache liste beshcleunigt, da die bei mir extrem oft aufgerufen werden ... allerdings ist das dot.exe so langsam, das ich es beim großen projekt nicht erwarten kann das es fertig wird ... (die temp.dot datei hat 4600 zeilen ...)

Delphi-Quellcode:
procedure TForm_Main.BuildUnitCache;
var
    i : integer;
begin
    unitCache := TStringList.Create;
    unitCache.CaseSensitive := false;
    for i:=0 to CheckListBox_Units.Count-1 do
        if CheckListBox_Units.State[i] IN [cbChecked, cbGrayed] then
            unitCache.AddObject(UpperCase(CheckListBox_Units.Items[i]), TObject(CheckListBox_Units.State[i]));

    unitCache.Sorted := TRUE;
end;

FUNCTION TForm_Main.UnitInGraph(UnitName: string): boolean;
{ - Unit is patr of the graph? }
VAR
  i : integer;
BEGIN
  Result := false;
  if unitCache = nil then BuildUnitCache;

  Result := unitCache.IndexOf(UnitName) >= 0;
END;

FUNCTION TForm_Main.UnitShowChilds(UnitName: string): boolean;
{ Show child Units for that Unit? Depends on user setting and result of code analysis ) }
VAR
  i : integer;
BEGIN
    Result := false;
    if unitCache = nil then BuildUnitCache;
    i := unitCache.IndexOf(unitName);
    if i >= 0 then
        Result := TCheckBoxState(unitCache.Objects[i]) in [cbChecked];
END;

also dot.exe dauert nur ca. 30 minuten, dann ist es fertig ...
und das bild sieht wirklich lustig aus (ob man da noch was erkennen kann? )
Miniaturansicht angehängter Grafiken
u_uu_141.png  
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#27
  Alt 12. Mär 2007, 13:23
Hui, da regnets aber Vorschläge und Verbesserungen. Super
Leider kann ich mir das erst heute abend richtig ansehen.
Aber eines interessiert mich doch jetzt schon: 4600 Zeilen im temp.dot? Das bedeutet ja gut 4000 Pfeilchen in der Grafik! Was ist das für ein Projekt? Wieviele Units hängen denn da drin? Das schafft ja kaum die komplette VCL, oder?

Gruß und Danke für die Änderungsvorschläge
Michael

(Wird wohl bald ein 0.51 geben müssen...)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#28
  Alt 12. Mär 2007, 13:38
ja müssten so 2000 units sein ...
mit (fast) allen komponenten im search path komme ich dann auf eine dot datei mit 26500 zeilen, aber die will ich dem nicht mehr berechnen/zeichnen lassen

aber ich brauche das tool hauptsächlich für die kleinen nebenprojekte zum analysieren welche units (bzw. warum diese drinnen sind) und dafür ist es schon fast ganz perfekt
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#29
  Alt 13. Mär 2007, 08:27
Ha, das Bildchen (3 Einträge weiter oben) kenn' ich doch! So sehen bei mir auch manche Projekte aus
(Leider zeigt sich da auch schon wieder ein Bug: Die Schriftart ist zu groß )
Hatte mir auch schon überlegt, ob ich für solche Projekte nicht noch einen Poster-Druck in das Programm einbauen sollte. Macht sich einfach toll an der Bürowand. Damit die Kollegen mal wissen, wogegen man ankämpft....

Gruß
Michael
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#30
  Alt 13. Mär 2007, 08:51
wollte es mal probieren, als WMF exportieren, und dann ins coreldraw rein, das hat ja nen posterdruck

allerdings macht das dot bei den pfeilen ein paar fehler, (sieht zumindest so aus) da gibts ein paar pfeile ohne linien ... leider hab ich das wmf nicht mehr, werds bei gelegenheit noch mal neu machen, und reinzoomen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz