Evitare il debug all’interno di metodi o proprietà: DebuggerHiddenAttribute e DebuggerStepThroughAttribute
Gli attributi che analizzeremo in questo post servono per evitare che si possa eseguire debug all’interno di metodi o proprietà delle nostre classi. Appartengono entrambi al namespace System.Diagnostics.
DebuggerHiddenAttribute
L’attributo DebuggerHidden permette di “nascondere” un costruttore, un metodo o una proprietà. Decorando un membro dei precedenti con questo attributo facciamo si che quando si esegue il debug non si possa eseguire uno step-into all’interno del metodo o fermarsi in un breakpoint interno al metodo stesso.
Un esempio di utilizzo dell’attributo è il seguente:
- Public Class Class1
- Public Function NotHiddenMethod() As Boolean
- Return True
- End Function
- <Diagnostics.DebuggerHidden()> _
- Public Function HiddenMethod() As Boolean
- Return True
- End Function
- End Class
Di fatto, il metodo HiddenMethod non può essere debuggato né utilizzando lo step-into né inserendo un breakpoint all’interno (per la cronaca l’ambiente di sviluppo permette di inserire il breakpoint ma questo non è attivo).
DebuggerStepThroughAttribute
DebuggerStepThrough funziona in maniera analoga al precedente attributo ma si limita solo a non permettere l’esecuzione dello Step-Into nel metodo e non a disabilitare i breakpoint interni. In più rispetto al precedente attributo, questo può essere applicato anche a livello di classe o struttura in modo da inibire tutti i membri della classe o struttura stessa.
In realtà l’attributo funziona in due differenti modalità in base all’opzione “Enable Just My Code” impostata nelle proprietà di debug del progetto:
Se è abilitata l’opzione Just My Code, l’attributo si comporta esattamente come l’attributo precedente non permettendo neanche i breakpoint interni ai membri decorati.
Se non è abilitata l’opzione Just My Code, invece, il flusso di esecuzione in debug si fermerà su eventuali breakpoint interni ai membri pur non permettendo lo step-into.
Commenti