Come posso fare qualcosa di simile al seguente codice C in VB 6?Modalità debug in VB 6?
risposta
È praticamente uguale alle altre lingue a cui sei abituato. La sintassi è simile al seguente:
#If DEBUG = 1 Then
' Do something
#Else
' Do something else
#End If
E 'facile da ricordare se si ricorda solo che la sintassi è esattamente lo stesso come le altre dichiarazioni di flusso di controllo in VB 6, salvo che i condizionali di compilazione iniziano con una libbra firmare (#
).
Il trucco è in realtà la definizione della costante DEBUG
(o qualsiasi altra cosa) perché sono abbastanza sicuro che non ce n'è una definita per impostazione predefinita. Ci sono due modi standard di farlo:
utilizzare la parola chiave
#Const
per definire la costante nella parte superiore di ogni file sorgente. La definizione che stabilisci in questo modo è valida in tutto il modulo sorgente. Sarebbe come:#Const DEBUG = 1
Impostare la costante nelle proprietà del progetto. Questo definirà una costante valida per tutto il progetto (ed è probabilmente ciò che si desidera per un indicatore della modalità "Debug").
Per fare questo, inserire qualcosa di simile a quanto segue nella casella di testo "condizionali di compilazione Costanti" nella scheda "Make" della finestra di dialogo "Proprietà del progetto":
DEBUG = 1
Puoi definire più costanti in questa finestra separando ciascuno di loro con i due punti (
:
):DEBUG = 1 : VERSION2 = 1
ricordare che qualsiasi costante che è non definito viene considerato 0.
Cody si è parlato di compilazione condizionale. Vorrei aggiungere che se si desidera un comportamento diverso durante il debug sull'IDE (ad esempio, disattivare la gestione degli errori in modo che l'IDE trapassi gli errori) non è necessario compilare condizionale compilazione . È possibile rilevare l'IDE in fase di esecuzione come questo.
On Error Resume Next
Debug.Print 1/0
If Err=0 then
'Compiled Binary
Else
'in the IDE
End if
Questo perché Debug.Print viene omesso nel file EXE compilato.
- EDIT ricordarsi di spegnere On Error Resume Next!
- EDIT Puoi avvolgere il check-in una funzione come this (grazie CraigJ)
Questo è un suggerimento, ma probabilmente a un certo punto vorresti disattivare l'opzione "On Error Resume Next", eh? :-) –
Perché? Il prossimo errore è la migliore strategia di gestione degli errori - l'utente non vede alcun errore in questo modo :) Beh, almeno fino a quando non guarda i dati reali ... Più seriamente, stiamo solo usando la variabile globale (inEXE) e inizializzarlo mentre il programma si avvia; lo stesso per i flag di debug e trace. Sì, questo approccio non utilizza le direttive del preprocessore, ma l'overhead del tempo di esecuzione (dalla verifica di vari flag) è trascurabile rispetto all'accesso al database o anche al semplice disegno dell'interfaccia utente. – Arvo
Sarebbe meglio dichiarare un flag globale e fare questo controllo da qualche parte verso l'inizio di Sub Main. In questo modo puoi controllare il debug con un sovraccarico minimo. –
Per ottenere lo stesso effetto di MarkJ, ma con la gestione degli errori, è possibile utilizzare il seguente codice.
Public Function GetRunningInIDE() As Boolean
Dim x As Long
Debug.Assert Not TestIDE(x)
GetRunningInIDE = x = 1
End Function
Private Function TestIDE(x As Long) As Boolean
x = 1
End Function
Quando si esegue all'interno dell'IDE, ci sarà un sovraccarico aggiuntivo di chiamare una funzione (che è irrisoria). Quando è compilato, questo valuta un semplice confronto numerico.
+1. Questo in realtà assomiglia a quello che effettivamente usiamo al lavoro, ma non ho inserito quel codice, perché appartiene al mio datore di lavoro. – MarkJ
Questo è il mio codice breve e stabile. Penso che sia meglio delle costanti condizionali, perché non è necessario cambiarlo in ogni momento di complicazioni.
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0/0
InIDE = Err.Number <> 0
End Function
+1 Risposta migliore perché è breve e dolce e non richiede la modifica delle proprietà del progetto ogni volta che è necessario ricompilare. – Keith
Questo sembra fantastico, solo una domanda, quando si compila la versione del exe sto assumendo è necessario impostare DEBUG = 0 o fa VB rileva automaticamente questo e in qualche modo riesce a garantire la roba di debug è non compilato (raccolgo const dovrebbe essere internamente codificato nel compilatore perché sia in grado di farlo, improbabile ma volevo solo essere sicuro). Quindi prima della versione è sufficiente impostare DEBUG = 0 e pronto per la compilazione? –
@Erx: No, non c'è il rilevamento automatico eseguito dal compilatore. Il simbolo 'DEBUG' non è definito automaticamente, devi farlo tu stesso. Quindi il passaggio alla modalità "rilascio" è un'azione manuale. Sì, in questo esempio, cambieresti la costante 'DEBUG' in fase di compilazione a 0. –
cosa succederebbe se mettessi il DEBUG = 1 nell'area del modulo delle dichiarazioni generali del codice ...? Funzionerebbe ancora o fallire? –