In Excel VBA, è buona norma lasciare le istruzioni Debug.Print
nel codice che va in "produzione"? Questo è molto utile per eseguire il debug dei fogli in tempo reale sulla macchina dell'utente quando qualcosa va storto. Influisce sul rendimento quando Visual Studio è chiuso? Se no, cosa consiglieresti?È buona norma lasciare istruzioni "Debug.Print" nel codice che va in "produzione"?
risposta
L'istruzione di debug.Print DO ha un piccolo costo di prestazioni. Quindi li eviterei in loop che vengono eseguiti un milione di volte. Tranne quei casi, penso che sia giusto tenerli.
È anche possibile utilizzare le direttive di compilazione condizionale (#if
) in combinazione con una costante del compilatore (#const
) per abilitarle/disabilitarle globalmente senza impatto sulle prestazioni.
#CONST developMode = True
sub Xyz
#If developMode Then
Debug.Print "something"
#End If
End Sub
@iDevelop +1 Scopri qualcosa di nuovo ogni giorno - non realizza la compilazione condizionale supportata da Excel! Grazie. – dash
che sembra interessante, grazie! – Jerome
Abbastanza chiaro per desservare un +1 :). Btw, la compilazione condizionale (e alcune altre cose utili) è stata discussa in questo thread interessante: http://stackoverflow.com/questions/1070863/hidden-features-of-vba – JMax
Di solito ho due versioni; prod senza debugging e prod con debugging. Ciò, combinato con la registrazione del gestore errori di catchall, significa che se un utente presenta problemi, posso distribuire la versione di debug a loro e possono eseguirla.
Ho una macro che eseguo i commenti fuori dalle istruzioni debug.print, quindi non è un vero e proprio sovraccarico di manutenzione.
Il problema con l'esecuzione di una versione di debug tutto il tempo (e, con Excel VBA non è di solito una cosa di prestazioni) è che la tua app è costantemente l'emissione di informazioni che non ha bisogno anche. In un ambiente con fogli elettronici controllati, ad esempio, questo può essere visto come una cosa negativa.
In termini di gestione degli errori globale, è ancora necessario l'errore dichiarazione su Goto per ogni funzione che si desidera la gestione degli errori in È possibile, tuttavia, tubo di questi per una funzione comune:.
Public Function HandleTheNastyErrors(E As ErrObject, ByVal writeLog As Boolean = True)
Select Case E.Number
Case xxx
...specific error handling...
Case Else
... Display a message to the user about how you dont know what happened....
End Select
If writeLog Then
...Log Writing Code...
End If
End Function
E poi, OnError:
ErrorHandler:
Call HandleTheNastyErrors(Err, True)
Visualizza fare il trucco
Potresti commentare il tuo "catch all"? Non ho davvero idee su come gestire gli errori in modo intelligente e in qualche modo genericamente finora. Grazie ! – Jerome
@jeromeG Ecco qua. Spero che sia d'aiuto. – dash
passando l'oggetto errore stesso al functon ... questa è un'idea interessante. –
- 1. È buona norma estendere NSError
- 2. È buona norma impostare allowCoreThreadTimeOut() in ThreadPoolExecutor?
- 3. È buona norma usare size_t in C++?
- 4. È buona norma utilizzare rawQuery in ContentProvider?
- 5. È buona norma usare jQuery nel progetto Angular JS?
- 6. È buona norma includere la configurazione XML nel classpath Java?
- 7. È buona norma memorizzare il token csrf nel meta tag?
- 8. È buona norma usare spesso instanceof?
- 9. È buona norma usare enum come int?
- 10. È buona norma avere una query linq in Controller?
- 11. È buona norma nascondere la definizione della struttura in C?
- 12. è buona norma chiudere i descrittori di file all'uscita
- 13. È buona norma usare indici invertiti su chiavi surrogate? (Oracle)
- 14. È buona norma bloccare un mutex pthread prima di distruggerlo?
- 15. È buona norma per un record Clojure implementare IFn?
- 16. DDD e MongoDB: Va bene lasciare che Mongo crei ObjectIDs?
- 17. È buona norma inizializzare una variabile su zero?
- 18. È buona norma passare lo stato come sostegno ai bambini?
- 19. È una cattiva pratica lasciare codice commentato nelle versioni di produzione
- 20. È buona norma rimuovere i riferimenti per aiutare il GC?
- 21. Flusso di lavoro nel codice di produzione
- 22. È buona norma utilizzare l'espressione regolare per la convalida dell'input?
- 23. Va bene lasciare un canale aperto?
- 24. È buona norma sovrascrivere fetch() e save() direttamente dal modello?
- 25. Cosa c'è che non va nel mio codice set Mandelbrot?
- 26. NHibernate SchemaUpdate è sicuro nel codice di produzione?
- 27. È possibile utilizzare il cronometro nel codice di produzione?
- 28. È buona norma terminare i tag a chiusura automatica di coldfusion con "/>"?
- 29. indicizzazione Mongoose nel codice di produzione
- 30. C#: best practice Debug.Print
Tu dici "Visual Studio", ma si parla di VBA, giusto? Intendi VBE? – aevanko
Ahhh, sì, immagino di capire cosa le persone chiamano VBE ora ... Sì, immagino di sì :) [ALT + F11] – Jerome
1) Se è importante catturare ciò che l'utente stava facendo quando le cose andavano male, un log delle transazioni avrebbe visto un'opzione migliore. Inizia un nuovo file per corsa o al giorno; cancellare qualsiasi oltre 48 ore di vita. Sì, c'è un costo in termini di prestazioni, ma come lo misureresti? 2) Visual Studio è l'ambiente di sviluppo di MS per i suoi linguaggi professionali. VB 2010 è centinaia di volte più veloce di VBA/VBE e ha migliaia di fantastici servizi. È possibile accedere a Excel da esso se si desidera utilizzare un foglio di lavoro. –