2009-04-17 14 views
14

Per quanto antiquato e doloroso, lavoro in un'azienda che continua a utilizzare attivamente VB6 per un grande progetto. In effetti, 18 mesi fa ci siamo imbattuti nel limite dell'identificatore 32k.Accesso accurato alle limitazioni VB6

Non volendo rinunciare alla grande base di codice e riscrivere tutto in .NET, abbiamo rotto la nostra applicazione in un file eseguibile principale e diversi file DLL di supporto. Questa settimana ci siamo imbattuti nuovamente nel limite di 32k.

Il problema che abbiamo è che nessuno strumento che possiamo trovare ci dirà quanti identificatori univoci utilizza la nostra fonte. Non abbiamo un modo preciso per valutare in che modo i nostri sforzi stanno riducendo il numero di identificatori o quanto siamo vicini al limite prima di raggiungerlo.

Qualcuno sa di uno strumento che analizzerà la fonte per un progetto e restituirà metriche e statistiche accurate?

risposta

2

OK. Il Visualizzatore metriche progetto che fa parte dello strumento Project Analyzer di Aivosto farà esattamente ciò che desideri. Ho incluso uno screenshot e anche il link alla lista di metriche che include i numeri di variabili ecc

Metrics List

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

+0

Vorrei che questo strumento funzionasse ... Mostra il numero di dichiarazioni variabili (come fa CodeSMART) ma non mostra ancora il numero di identificatori univoci. Se hai tre sottotitoli che contengono tutti la stessa variabile "myvar", allora conta come tre dichiarazioni variabili ma solo un identificatore univoco. L'analizzatore di progetto mostra solo il conteggio delle dichiarazioni ... –

1
+1

Sì, ma il richiedente richiede un conteggio del numero di dichiarazioni variabili e non riesco a vedere dove CodeSmart mostra tale cifra. Puoi dirci dove dovrebbe essere? Grazie. –

+0

È lì, ma non ho l'hosting di immagini per correggere lo screenshot dal sito Web del produttore. Se si scarica la versione di prova e si installa, è possibile eseguirla e vedere di persona. – MaSuGaNa

+0

Ho installato CodeSMART ma non riesco a trovarlo. Puoi dire il "percorso" dell'albero in cui viene visualizzato questo valore? –

-1

Sembra che Compuware's DevPartner avesse quel tipo di analisi del codice. Non so se la versione corrente supporti ancora Visual Basic 6.0. (Ma almeno c'è una prova di 14 giorni disponibile)

0

Si potrebbe ottenere questo da uno strumento che estrae identificatori dal codice VB6. Quindi tutto ciò che dovresti fare è ordinare l'elenco, eliminare i duplicati e misurare la dimensione dell'elenco. Abbiamo un source code search engine che suddivide il codice sorgente in token di lingua ("lex"), con alcuni di quei token che sono esattamente quegli identificatori. Ciò conterrebbe esattamente i dati che desideri.

Ma forse c'è un altro modo per risolvere il problema: individuare i nomi delle variabili che si verificano raramente e sostituirli con un insieme di nomi standard (ad es. "Temp"). Quindi quello che vuoi veramente è un conteggio del numero di ciascun nome di variabile in modo da poter ordinare per "piccoli numeri di riferimenti". Gli stessi dati di lexer possono fornire queste informazioni.

Quindi tutto ciò di cui hai bisogno è uno strumento per rinominare gli identificatori a bassa occorrenza a qualcosa del set standard. Offriamo offuscatori che sostituiscono un nome con un altro che probabilmente potrebbe farlo.

[Aggiornamento ott 2014]. Ho appena avuto una lunga conversazione con qualcuno con questo problema. Risulta che esiste una risposta piuttosto concettuale su cui basare uno strumento, che è chiamato register coloring, che alloca un numero fisso di registri su un numero arbitrario di operandi. Questo funziona calcolando un "grafico di interferenza" sugli operandi; e due operandi che non "interferiscono" possono essere assegnati allo stesso registro. Si potrebbe usare questo per assegnare 2^16 nomi di nomi di variabili disponibili a un numero arbitrario di identificatori, se il grafico di interferenza non è abbastanza cattivo. La mia ipotesi è che non lo sia. YMMV, e qualcuno deve ancora costruire un tale strumento, che ha bisogno probabilmente di un parser VB6 e di un macchinario per calcolare un grafico del genere. [Dai un'occhiata alla mia biografia].

0

Cheat: crea una classe inutilizzata con #### variabili univoche al suo interno. Usa Excel o qualcosa del genere per generare i nomi delle variabili univoci alfabetici. Rimuovi la classe dal progetto quando raggiungi il limite o commenta blocchi di 100 variabili univoche.

Preferisco appoggiarmi al compilatore (il quale definisce il numero di variabili quante sono troppe) rispetto ad alcuni strumenti di terze parti.

(oh CRUD, spiace Necro - non ha notato le date)

1

L'azienda per cui lavoro ha anche un grande progetto VB6 che incontra il limite di identificazione. Ho sviluppato un modo per contare con precisione il numero di identificatori rimanenti, e questo è stato incorporato nel nostro processo di costruzione per questo progetto.

Dopo aver provato diversi strumenti senza esito positivo, mi sono finalmente reso conto che l'IDE VB6 di per sé sa esattamente quanti identificatori è rimasto. In effetti, l'IDE VB6 genera un errore di "memoria insufficiente" quando si aggiunge una variabile oltre il limite.

Approfittando di questo fatto, ho scritto un progetto Add-In VB6 che prima compila il progetto attualmente caricato nell'IDE, quindi aggiunge variabili nominative univoche al progetto finché non genera un errore. Quando viene generato un errore, registra il numero di identificatori aggiunti prima dell'errore come numero di identificatori rimanenti.

Questo numero è archiviato in un file noto al nostro processo di compilazione automatizzato, che legge questo numero e lo segnala al team di sviluppo. Quando scende al di sotto di un valore con cui ci sentiamo a nostro agio, pianifichiamo un po 'di tempo per il refactoring e spostiamo più codice da questo progetto in progetti DLL. Lo stiamo utilizzando in produzione da diversi anni e si è dimostrato un processo affidabile.

Per rispondere direttamente alla domanda, l'utilizzo di un componente aggiuntivo è l'unico modo che conosco per misurare con precisione il numero di identificatori rimanenti. Anche se non posso condividere il codice aggiuntivo del nostro progetto, posso dire che non c'è molto codice in questione, e non ci è voluto molto tempo per svilupparlo.

Microsoft ha una guida decente per come creare un componente aggiuntivo, che può iniziare: https://support.microsoft.com/en-us/kb/189468

Ecco alcuni importanti dettagli specifici di identificatori conteggio:

  • Il VB6 IDE non genererà costantemente un errore quando si esce da identificatori fino a quando il progetto caricato corrente non è stato compilato. Il nostro componente aggiuntivo esegue questa operazione prima di aggiungere identificatori per garantire un conteggio accurato. Se il progetto non può essere compilato, non è possibile ottenere un conteggio accurato.
  • Ci sono 32.500 identificatori disponibili per un nuovo progetto VB6 vuoto.
  • Contano solo i nomi identificativi univoci. Due variabili locali con lo stesso nome in due routine diverse contano solo come un identificatore.