IDE: Debug e puntatori multipli
copia linkDescrizione del difetto
Se si scriveva un'espressione complessa si potevano ottenere errori a run-time in casi molto particolari. Il malfunzionamento si manifestava se si scriveva il codice seguente:
MyClass doc = new() if (doc && doc.objProp && doc.objProp.objSubProp) ...Il modulo di debug cerca di evidenziare il se e per quale motivo il sistema entra o meno in un blocco IF. Per farlo elenca il valore di tutte le parti dell'espressione booleana (doc, doc.objProp, doc.objProp.objSubProp).
Nelle versioni precedenti veniva protetto solo il primo puntatore, quindi, il codice di debug era il seguente:
MyClass doc = new() if (doc != null) DTTObj.AddToken(..., doc!=null) if (doc != null) DTTObj.AddToken(..., doc.objProp!=null) if (doc != null) DTTObj.AddToken(..., doc.objProp.objSubProp!=null) if (doc && doc.objProp && doc.objProp.objSubProp) ...e la terza riga del debug generava errore se doc.objProp era uguale a null.
A partire dalla versione 19.5, invece, il codice generato è il seguente:
MyClass doc = new() DTTObj.AddToken(..., doc!=null) if (doc != null) DTTObj.AddToken(..., doc.objProp!=null) if (doc != null && doc.objProp != null) DTTObj.AddToken(..., doc.objProp.objSubProp!=null) if (doc && doc.objProp && doc.objProp.objSubProp) ...In questo modo le varie chiamate al modulo di debug sono sempre protette ed è più semplice capire quale parte dell'espressione è False:
Effetti del malfunzionamento
- Veniva generato un errore a run-time quando il metodo veniva eseguito.
Soluzioni
Era sufficiente scrivere più IF innestati o, qualora non necessario, disattivare il modulo di debug per il metodo contenente l'espressione complessa.
Funzionalità interessate
L'utilizzo del modulo di debug.
Note
- Malfunzionamento relativo alla richiesta di assistenza 000844-2019.
Ultima modifica: 25/09/2019 / Validità: da 19.5.7600