Elaborazione del debug Designer in VS 2008
-
02-07-2019 - |
Domanda
Ho una proprietà pubblica impostata nella mia forma di tipo ListE<T>
dove:
public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
Sì, è un boccone, ma è quello che richiede il Designer per mostrarlo come una raccolta modificabile nella finestra Proprietà. Che fa! Quindi, faccio clic sul piccolo pulsante [..] per modificare la raccolta, quindi fare clic su Aggiungi per aggiungere un elemento alla raccolta.
L'operazione aritmetica ha provocato un overflow.
Ora, questo è un elenco molto semplice, poco più di un array in espansione. L'unica parte che si avvicina all'aritmetica nel tutto è nella funzione di espansione, e anche quella utilizza uno spostamento a sinistra anziché una moltiplicazione, in modo che non trabocchi. Tutto ciò mi fa pensare che questa eccezione sia stata sollevata all'interno del Designer, forse a causa di una piccola disattenzione ai dettagli di implementazione da parte mia, ma non riesco a trovare un modo per testare o eseguire il debug di tale scenario. Qualcuno ha qualche idea intelligente?
EDIT: Sì, posso usare la proprietà con successo, anche manualmente, vale a dire. nel gestore OnLoad
e suppongo che sia quello a cui dovrò ricorrere se non riesco a farlo funzionare, ma non sarebbe l'ideale. : (
Soluzione
Non riesco a capire cosa ti motiva a tentare di reinventare la Lista < T > ruota in quel modo, ma per rispondere alla tua domanda: aggiungerei una riga " System.Diagnostics.Debugger.Break () " al costruttore della tua classe.
Quindi prova a usarlo nel designer e otterrai un popup che ti chiederà se vuoi collegare un debugger. Collega una seconda istanza di Visual Studio come debugger e sarai in grado di impostare alcuni punti di interruzione nel codice e iniziare il debug.
Altri suggerimenti
Un punto di partenza sarebbe che potrebbe fare matematica con la proprietà ListE`1 :: Count. Se ciò presenta un difetto impercettibile (ovvero è più complicato che restituire this.innerList.Count), potrebbe causare l'overflow aritmetico del progettista in alcune operazioni. Normalmente non si verificano overflow aritmetici se non specificamente richiesto di utilizzare
checked
{
// ...
}
sintassi.
Non è necessario aggiungere Debugger.Break (); chiama il tuo codice per eseguirne il debug. Puoi semplicemente aprire una diversa istanza di VS e collegarti a quella in cui la stai utilizzando e dovresti essere in grado di eseguire il debug senza problemi (assicurati solo di avere i simboli caricati).