Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Come sapere se sono in debug mode. Review

Nel precedente post avevo trattato la possibilità di verificare se il nostro codice in esecuzione fosse in modalità debug oppure no.
Mi sono accorto, però, che le routine d'esempio avevano qualche problema rendendo inutile la funzione isDebugMode.
Il motivo è proprio nella chiamata debug.assert.
Diamo un'occhiata al codice difettoso:

Public Function isDebugMode() As Boolean
    Debug.Assert Not myCheck(isDebugMode)
End Function

Private Function myCheck(ByVal bValue As Boolean) As Boolean
    mycheck = True
End Function


La prima chiamata, quella pubblica, esegue un'istruzione di Debug.Assert testando la function myCheck la quale restituiva sempre true. In questo modo la dichiazione "Not" posta prima del test avrebbe sempre restituito False.
Una cosa come scrivere:
 
Public Function isDebugMode() As Boolean
    Debug.Assert Not False
End Function


Così impostata Debug.Assert avrebbe sempre rilasciato lo stack di chiamate arrestando sempre l'esecuzione del codice in fase di debug.

La versione corretta della nostra è questa:

Public Function isDebugMode() As Boolean
    Debug.Assert Not myCheck(isDebugMode)
End Function

Private Function myCheck(ByRef bValue As Boolean) As Boolean
    bValue = True
End Function

La differenza sta nel fatto che alla myCheck viene passato per riferimento un valore Boolean (isDebugMode per l'appunto) che viene forzato a True (in caso di debug mode), ma questa volta la routine myCheck restituirà False dato che non vi è nessun valore di ritorno esplicito.
Il tutto diverrebbe a runtime: Debug.Assert Not False
In questo modo il codice non si blocca più e "isDebugMode", passato per riferimento alla myCheck verrebbe impostato a True in fase di debug altrimenti ignorato ed impostato a False dopo la compilazione.

Private Sub Form_Load()
 If isDebugMode Then
   'Codice da eseguire solo se sono in debug
 Else
   'Codice da eseguire solo una volta compilato
 End If
End Sub

Ora che il tutto sembra essere tornato a funzionare spero di non aver complicato ulteriormente le idee.
Categoria: VB6
martedì, 10 ott 2006 Ore. 18.57
Statistiche
  • Views Home Page: 109.896
  • Views Posts: 560.319
  • Views Gallerie: 108.956
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003