2009-04-17 4 views
14

So antiquiert und schmerzhaft wie es ist - ich arbeite in einem Unternehmen, das VB6 weiterhin aktiv für ein großes Projekt verwendet. In der Tat, vor 18 Monaten sind wir auf die 32k-ID-Grenze gestoßen.Präzise Zugriff auf VB6 Einschränkungen

Nicht bereit, auf die große Code-Basis aufzugeben und alles in .NET neu zu schreiben. Wir haben unsere Anwendung in eine ausführbare Hauptdatei und mehrere unterstützende DLL-Dateien aufgeteilt. Diese Woche sind wir wieder auf das Limit von 32k gestoßen.

Das Problem, das wir haben, ist, dass kein Tool, das wir finden können, uns sagen wird, wie viele eindeutige Identifikatoren unsere Quelle verwendet. Wir wissen nicht genau, wie unsere Bemühungen die Anzahl der Identifikatoren verringern oder wie nahe wir an der Grenze sind, bevor wir sie erreichen.

Kennt jemand ein Tool, das die Quelle für ein Projekt scannt und einige genaue Metriken und Statistiken zurückgibt?

Antwort

2

OK. Der Project Metrics Viewer, der Teil des Project Analyzer Tools von Aivosto ist, wird genau das tun, was Sie wollen. Ich habe einen Screenshot und auch den Link auf die Metriken Liste enthalten, die Anzahl von Variablen enthält usw.

Metrics List

alt text http://www.aivosto.com/project/help/pm-main.gif

+0

Ich wünschte, dass dieses Tool funktioniert ... Es zeigt die Anzahl der Variablen Deklarationen (wie auch CodeSMART), aber es zeigt immer noch nicht die Anzahl der eindeutigen Bezeichner. Wenn Sie drei Subs haben, die alle die gleiche Variable "myvar" enthalten, zählt es als drei Variablendeklarationen, aber nur eine eindeutige Kennung. Project Analyzer zeigt nur die Anzahl der Deklarationen an ... –

1
+1

Ja, aber der Fragesteller muss die Anzahl der Variablendeklarationen zählen, und ich kann nicht sehen, wo CodeSmart diese Zahl anzeigt. Kannst du uns sagen, wo es sein sollte? Vielen Dank. –

+0

Es ist da, aber ich habe kein Bild-Hosting, um den Screenshot von der Website des Herstellers zu korrigieren. Wenn Sie die Testversion herunterladen und installieren, können Sie sie ausführen und selbst sehen. – MaSuGaNa

+0

Ich habe CodeSMART installiert, kann es aber nicht finden. Können Sie den "Pfad" des Baumes angeben, wo dieser Wert angezeigt wird? –

-1

Es scheint, dass Compuware's DevPartner diese Art von Code-Analyse hatte. Ich weiß nicht, ob die aktuelle Version noch Visual Basic 6.0 unterstützt. (Aber mindestens gibt es eine 14-tägige Testversion)

0

Sie könnten dies erhalten aus einem Werkzeug, das Kennungen von VB6-Code extrahiert. Dann müssen Sie nur die Liste sortieren, Duplikate eliminieren und die Listengröße messen. Wir haben eine source code search engine, die Quellcode in Sprachtokens ("lexes") aufteilt, wobei einige dieser Tokens genau diese Bezeichner sind. Das würde genau die Daten enthalten, die Sie möchten.

Aber vielleicht gibt es einen anderen Weg, um Ihr Problem zu lösen: herauszufinden, welche Variablennamen selten auftreten und ersetzen sie durch eine Reihe von Standardnamen (z. B. "Temp"). Also, was Sie wirklich wollen, ist eine Zählung der Nummer jedes Variablennamens, so dass Sie nach "kleinen Anzahlen von Referenzen" sortieren können. Die gleichen Lexer-Daten können diese Information liefern.

Dann ist alles, was Sie brauchen, ein Werkzeug, um Low-Occurrence-Identifier zu etwas aus dem Standard-Set umzubenennen. Wir bieten Obfuscatoren, die einen Namen durch einen anderen ersetzen, der dies wahrscheinlich tun könnte.

[Oktober 2014 Update]. Hatte gerade eine lange Unterhaltung mit jemandem mit diesem Problem. Es stellt sich heraus, dass es eine ziemlich konzeptionelle Antwort gibt, auf der ein Werkzeug basiert, und das heißt register coloring, die eine feste Anzahl von Registern einer beliebigen Anzahl von Operanden zuordnet. Dies funktioniert durch Berechnen eines "Interferenzgraphen" über Operanden; und zwei Operanden, die nicht "interferieren", können demselben Register zugewiesen werden. Man könnte das verwenden, um einer beliebigen Anzahl von Bezeichnern 2^16 verfügbare Variablennamen zuzuordnen, wenn das Interferenzdiagramm nicht schlecht genug ist. Meine Vermutung ist, dass es nicht ist. YMMV, und jemand muss noch ein solches Werkzeug bauen, das wahrscheinlich einen VB6-Parser und Maschinen benötigt, um solch einen Graphen zu berechnen. [Schau dir meine Bio an].

0

Cheat - eine unbenutzte Klasse mit #### eindeutigen Variablen erstellen. Verwenden Sie Excel oder etwas, um die alphabetischen eindeutigen Variablennamen zu generieren. Entfernen Sie die Klasse aus dem Projekt, wenn Sie das Limit erreicht haben, oder geben Sie Blöcke von 100 eindeutigen Variablen aus.

Ich würde lieber auf den Compiler (die definiert wie viele Variablen sind zu viele) als auf einigen Drittanbieter-Tool sowieso.

(oh crud, sorry Necro - bemerkte nicht die Daten)

1

Die Firma für die ich auch arbeiten hat ein großes VB6-Projekt, das die Kennung Grenze gestoßen. Ich habe einen Weg entwickelt, die Anzahl der verbleibenden Identifikatoren genau zu zählen, und dies wurde in unseren Build-Prozess für dieses Projekt integriert.

Nachdem ich mehrere Tools ohne Erfolg ausprobiert hatte, erkannte ich schließlich, dass die VB6 IDE selbst genau weiß, wie viele Kennungen sie noch hat. In der Tat, die VB6-IDE löst einen Fehler "nicht genügend Arbeitsspeicher" aus, wenn Sie eine Variable nach dem Limit hinzufügen.

Aus diesem Grund habe ich ein VB6 Add-In-Projekt geschrieben, das zuerst das aktuell geladene Projekt in der IDE kompiliert und dann dem Projekt Variablen mit eindeutigen Namen hinzufügt, bis ein Fehler ausgegeben wird. Wenn ein Fehler auftritt, wird die Anzahl der vor dem Fehler hinzugefügten IDs als Anzahl der verbleibenden IDs aufgezeichnet.

Diese Nummer wird in einer Datei an einem Speicherort gespeichert, der unserem automatisierten Buildprozess bekannt ist. Dieser liest diese Nummer und meldet sie dem Entwicklungsteam. Wenn es unter einen Wert fällt, mit dem wir uns wohl fühlen, planen wir etwas Refactoring-Zeit und verschieben mehr Code aus diesem Projekt in DLL-Projekte. Wir setzen das seit einigen Jahren in der Produktion ein und haben sich als zuverlässiger Prozess erwiesen.

Um die Frage direkt zu beantworten, ist die Verwendung eines Add-Ins der einzige Weg, um die Anzahl der verbleibenden Identifikatoren genau zu messen. Obwohl ich den Add-In-Code, den unser Projekt verwendet, nicht teilen kann, kann ich sagen, dass nicht viel Code involviert ist und es nicht lange dauerte, ihn zu entwickeln.

Microsoft hat eine gute Anleitung, wie Sie ein Add-In erstellen, die Sie erhalten begonnen: https://support.microsoft.com/en-us/kb/189468

Hier sind einige wichtige Details spezifisch für das Zählen Bezeichner:

  • Die VB6 IDE wird nicht fortwährend einen Fehler ausgeben, wenn keine Bezeichner vorhanden sind, bis das aktuell geladene Projekt kompiliert wurde. Unser Add-In tut dies programmatisch, bevor es Kennungen hinzufügt, um eine genaue Anzahl zu garantieren. Wenn das Projekt nicht kompiliert werden kann, kann eine genaue Zählung nicht erhalten werden.
  • Für ein neues, leeres VB6-Projekt sind 32.500 Kennungen verfügbar.
  • Nur eindeutige Bezeichner zählen. Zwei lokale Variablen mit demselben Namen in zwei verschiedenen Routinen zählen nur als eine Kennung.