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 2 von 4     12 34      
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, 97x aufgerufen)
Dateityp: zip unitusage_0_6_source_125.zip (143,7 KB, 100x aufgerufen)
Dateityp: zip unitusage_0_6_executable_605.zip (426,1 KB, 124x aufgerufen)
 
grizzly

 
Delphi XE4 Professional
 
#11
  Alt 19. Jul 2006, 11:59
Danke für den intensiven Test! Das ist ja in der Tat ein sonderbares Verhalten.
Vielleicht habe ich aus unserem Firmentool vor Freigabe als "Freeware" doch zu viel rausgeschnitten (ich mußte einige firmeninterne Konstrukte und Analysen ausbauen).
Leider kann ich mir das erst heute abend ansehen.
Diese Parserei...

Dank und Gruß
Michael
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#12
  Alt 19. Jul 2006, 12:48
Zitat:
Welche Komponente zum anzeigen der Grafik verwendest Du denn ?
Bestimmt nicht TImage von Delphi, oder?
Doch. Ganz zu Anfang konnte man ja noch nicht im Graphen rumklicken und browsen. Da war das das bequemste, und es läuft ja noch immer...

Ich veranlasse dot.exe ja nicht ein JPEG oder ein GIF oder so etwas auszugeben. Ich verwende den Parameter -Tplain-ext. Die Datei temp.txt, die dabei erzeugt wird, beinhaltet alle Infos die ich brauche, um den Graphen selber zu zeichnen (Somit habe ich keine Probleme mit dem Skalieren oder dem Export als Vektor-Grafik). Gezeichnet wird natürlich auf ein separates Bitmap, welches nach fertigstellung ins Image kopiert wird.

Das mit dem selber-zeichnen ging auch nur, nachdem ich entdeckt habe, daß ich die zig Koordinaten, welche für die krummen Pfeile ausgegeben werden, mittels Canvas.PolyBezier identisch wie dot.exe ausgeben kann.


So, nu muß ich zurück an die Arbeit.
Bug-Hunting heute abend...

Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

 
Delphi 10 Seattle Enterprise
 
#13
  Alt 21. Jul 2006, 09:27
Zitat von grizzly:
Bug-Hunting heute abend...
Und? Was gefunden?
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#14
  Alt 21. Jul 2006, 16:25
Leider noch nicht, durfte bis kurz vor 23:00 bei 31° im Büro Überstunden schieben. Im Office mal wieder Hektik, Deadlines etc. Aber das kennt ihr ja alle

Montag abend sollte ich hoffentlich dazu kommen.


Gruß
Michael
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#15
  Alt 2. Aug 2006, 14:28
So, nun hatte ich Zeit mir das mal anzusehen...

Das Problem ist:
Um die Liste der verwendeten Units aus dem Code zu lesen, verwende ich ein kleines Stückchen Code, welches aus einem Pascal-Source sämtliche Kommentare, strings und toten Code (wg. Compiler-Direktiven) rauswirft. Was bleibt, ist purer reiner Pascal Code. Und wenn ich da drin ein "Uses" finde, dann ist es das ein "echtes" (und keines in strings, Kommentaren etc.).

Nun ist dieser Code-Teil etwas alt. Der hat beispielsweise Probleme mit {$IF ..} und anderem neumodischen Kram.
Und in einer der Delphi Units kommt im Assemblerteil ein string in folgendem Format vor: "'". Wußte bis letzte Woche gar nicht, daß man das im asm Teil machen darf.
(Habe gerade gesehen, daß im Browser das >> "'" << gar nicht richtig zu erkennen ist. Also, das ist: Gänsefüßchen, Apostroph, Gänsefüßchen)

Lange Rede, kurzer Sinn: Weil ich es in absehbarer Zeit eh nicht schaffe, auf all' diese Konstrukte Rücksicht zu nehmen, wird UnitUsage bis auf weiteres Source-Code, bei dem es Probleme gab, nur noch ohne "Child" Units anzeigen. Nicht toll, aber wenigstens nicht so falsch wie vorher
Einige simplere neue Direktiven werden aber nun abgefangen, es bleiben somit nicht mehr allzuviele unbehandelte Units übrig.

Die 0.43 liegt nun im ersten Eintrag zu diesem Thread zum Download bereit.

Zusätzlich neu ist die Möglichkeit der Angabe eines Suchpfades. (Dann braucht man sich die RTL nicht mehr mit in das Source-Verzeichnis kopieren).
Außerdem habe ich begonnen einen Viewer mit einzubauen, aber dieses verd... TRichEdit ist dermaßen träge, daß damit niemand sowas wie windows.pas aufmachen sollte. Das dauert Minuten, bis das angezeigt wird!


Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#16
  Alt 2. Aug 2006, 14:43
Zitat von grizzly:
Und in einer der Delphi Units kommt im Assemblerteil ein string in folgendem Format vor: "'". Wußte bis letzte Woche gar nicht, daß man das im asm Teil machen darf.
(Habe gerade gesehen, daß im Browser das >> "'" << gar nicht richtig zu erkennen ist. Also, das ist: Gänsefüßchen, Apostroph, Gänsefüßchen)
Wenn du wüstest, was alles möglich ist

wenn ich mal die Gelegenheit finde, stell ich dir mal ein paar meiner Units zusammen ... ich gehe ja öfters mal "unortodoxe" Wege und daher ist der entstehende Code ... nun ja, sagen wir mal gut für Testzwecke

ich glaub MaBuSE (oder von wem das andere Programm dieser Art ist) war von sowas wie dem hier dodal geschockt und wunderte sich, dat dieses wirklich läuft.
Delphi-Quellcode:
Unit TestU;

Interface
  {$INCLUDE FNS_VersionsCheck.inc}

  Uses Classes, Controls, Forms, StdCtrls, ExtCtrls, Math, PSAPI, Windows, SysUtils,

    FNS_Consts, FNS_Types, FNS_Memory, FNS_System,
    FNS_Messages, FNS_Languages, FNS_Forms,
    FNS_MathB, FNS_Log,

    FNS_Binary{, FNS_Colors{, FNS_DateTime}, FNS_Debug{, FNS_Files{, FNS_Hash{, FNS_Hints}, FNS_MemoryUT{, FNS_MemoryUT2}, FNS_Security, FNS_Strings{, FNS_Sys}, FNS_Unicode{,
    MSC_WinError}
, FNS_ValueConvert, FNS_Thread{, FNS_SpeedZip{, FNS_XPStyle};
Mehrfach verschachtelte Kommentare sind echt witzig.
Und soein {$INCLUDE ...} an den unpassensten Stellen kommt bestimmt och geil.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

 
Delphi 10 Seattle Enterprise
 
#17
  Alt 2. Aug 2006, 14:51
Zitat von himitsu:
ich glaub MaBuSE (oder von wem das andere Programm dieser Art ist) war von sowas wie dem hier dodal geschockt und wunderte sich, dat dieses wirklich läuft.
Mich schockt nix mehr

Das das läuft war mir klar, das es Programmier gibt, die so was auch wirklich machen, nicht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#18
  Alt 2. Aug 2006, 15:02
Hey, dat is aus 'nem Testprogramm und da ändert sich ständig was an der Unitzusammenstellen (selbst die Prozeduren/Funktionen in dem Programm leben manchmal nichtmal 'ne Stunde lang) und da hab ich halt keine Lust ständig die Unitnamen neu einzugeben, sondern kommentiere halt Nichtbenötigtes aus.

Die Verschachtelung von { } und (* *) is och genial, wenn man mal kurzzeitig mehr, oder weniger radikal Code loswerden muß ._.

Und wie schön man speichersparend die selbe lokale Variable rekursiv in mehreren Prozeduren verwenden kann, könntest du dir ja hier ansehen.
> GetVolumePathNamesForVolume > speziell ResultBuffer
  Mit Zitat antworten Zitat
grizzly

 
Delphi XE4 Professional
 
#19
  Alt 2. Aug 2006, 15:03
Jaja, künstlerisch verstrickter Code zeigt die Schwächen der Parser am schnellsten. Wobei UnitUsage leider noch weit davon entfernt ist, sich nur noch an heimtückischen Codeteilchen zu verschlucken.
Ich denke allerdings, daß die verschachtelten Kommentare und das {$include ..} von UnitUsage mittlerweile ohne Schluckauf verdaut werden sollten. Aber ich hab' schon öfters geträumt, daß irgendwas eigentlich funktionieren sollte...

Die nächsten zwei Wochen werde ich nicht dazu kommen, UnitUsage aufzurüsten. Aber wenn ich dann mal den Parser etwas besser durchtrainiert habe, teste ich ihn gern an "unorthodoxen" Code-Beispielen

Ob der Parser die Kommentare und die per conditional defines trocken gelegten Code Teile richtig erkannt hat, sieht man in UnitUsage mittlerweile über das View-Kommando (Rechter Mausklick auf Unit, egal ob Graph oder Liste). Solcher Text wird ausgegraut (cond. defines) oder blau/kursiv (Kommentare) dargestellt. Doch wie schon oben erwähnt: Blos keine großen Source-Codes damit ansehen. TRichEdit lädt sich zu Tode...


Gruß
Michael
  Mit Zitat antworten Zitat
Gruber_Hans_12345

 
Delphi 2007 Professional
 
#20
  Alt 15. Feb 2007, 13:03
also wirklich genial das teil, wäre cool, wenn du das mal opensource machen würdest

  • Wenn der Parser an ein File kommt, das ein anderer Prozess sperrt, zeigt er dieses zwar richtig an, aber nachher lässt sich auf der Oberfläche nichts mehr bedienen, und man muß den Prozess rauswerfen
  • ein zoom und so wäre für den Graph ganz nett, man kann zwar exportieren, aber da kann man dann nicht so schön suchen ...
  • da das erzeugen des graphen bei vielen units teils extrem lange dauert, wäre es vielleicht ne option, zuerst mal alle Units deselektieren, dann wenn man im tree eine unit selektiert, sollte in der Statusleiste auch die Infos angezeigt werden (genau so wie wenn man die unit im graphen selektiert)
  • ich verwende in {$I DEFAULT.INC} und dieses Default.inc enthält nur eine einzige {$DEFINE DEBUG} ... die Sources was diese DEfault.inc einbinden kann er nicht parsen (ExceptionHandling.pas parsing error: " ExceptionHandling.pas Line 3: Unexpected end of file in comment started on line 4")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 10:49 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