Imansible valutare l’espressione perché un thread viene arrestato in un punto in cui la garbage collection è imansible

Ecco l’errore

Imansible valutare l’espressione perché un thread viene arrestato in un punto in cui la garbage collection è imansible, probabilmente perché il codice è ottimizzato.

Sto scrivendo una semplice app per console e la prima riga di codice è questa:

List list = MyObjectModel.GetNonCompletedReturns(); 

e il codice per la funzione è:

 public static List GetNonCompletedReturns() { MyObject service = new MyObject(); List entities = (from recs in service.Retrieve() where select recs).ToList(); List models = new List(); foreach (MyObject entity in entities) { models.Add(BindModel(entity)); } return models; } 

e se provo a scorrere il codice, non appena torno alla pagina principale della mia app e passa il mouse sopra la lista, ricevo il messaggio di errore che ho mostrato.

Qualcuno può aiutare?

Questo errore si triggers solo quando si tenta di utilizzare la finestra di dialogo di controllo durante il debug. Prova ad usare qualche altra tecnica per generare le variabili, come Debug.WriteLine , Console.WriteLine e così via.

Se il tuo progetto è compilato in versione (con le ottimizzazioni triggerste), potresti vederlo. Hai provato la configurazione di DEBUG?

Nessuna delle risposte ha risolto il mio problema, quindi sto postando la soluzione che mi ha aiutato.

“Se ci sono molti dati nei parametri, questo errore può verificarsi, una soluzione semplice è creare un object, non una struttura perché è un object di dati.

Metti questo object nei tuoi parametri invece di tutte le diverse variabili, normalmente il problema non avrà più luogo. ”

Ecco un piccolo trucco nel caso in cui vuoi esaminare alcuni oggetti e non sei in grado di modificare i parametri:

Ho creato una chiamata a una nuova funzione temporanea, all’interno della funzione da cui non ero in grado di guardare il mio object. Poi, all’interno di quella nuova funzione, sono stato in grado di guardare il mio object. Al termine del lavoro, elimina la funzione.

Se la configurazione della tua soluzione di Visual Studio è Release , passa a Debug .

Anche se è vero che “Imansible valutare l’espressione perché un thread viene interrotto in un punto in cui la garbage collection è imansible, probabilmente perché il codice è ottimizzato” viene visualizzato l’errore in modalità di rilascio, la maggior parte degli sviluppatori si limita a configurare i propri progetti per compilare come build di debug. MA per essere sicuri di non avere problemi con la DLL di rilascio, è necessario anche controllare i riferimenti alle DLL presenti nella soluzione e assicurarsi che non si abbia un riferimento a una DLL di release-build. Se si trova che questo è il caso, eliminare il riferimento DLL e quindi aggiungere un riferimento al progetto piuttosto che un riferimento DLL. Il riferimento al progetto assicurerà che la soluzione faccia riferimento alle versioni di debug o release della DLL specificate nella configurazione della build.

Si noti che il consiglio di cui sopra si applica, ovviamente, solo a quelle DLL a cui si dispone del codice sorgente e che sono state create da un progetto nella propria soluzione.

Ho capito anche questo, quando ho colpito una NullReferenceException da un controllo di terze parti.

In questo caso, ho scoperto che se avessi impostato un punto di interruzione prima di colpire l’eccezione, avrei potuto quindi eseguire un singolo passaggio nel resto del codice senza vedere il problema.

Non ho idea del perché, ma questo ha funzionato per me – almeno in questo caso.

Per quello che vale, questo errore può anche essere causato da un loop infinito in un getter di proprietà (versione semplificata di seguito). Quando il debugger tenta di valutare la proprietà (ad esempio nella finestra di controllo), l’interfaccia utente si bloccherà per alcuni secondi e l’errore “Imansible valutare l’espressione …” verrà visualizzato per molte altre proprietà della stessa class.

 public int MyProperty { get { while (true) { } return 0; } } 

Innanzitutto assicurati di eseguire il codice in modalità DEBUG e con l’ottimizzazione del codice distriggersta. puoi distriggersrlo dalle proprietà del tuo progetto.

Se hai fatto tutto quanto sopra e il problema persiste, probabilmente c’è un problema con lo stack che Debug.Break() . La soluzione per questo è molto semplice, basta premere F10 per passare alla riga successiva e dovresti essere in grado di valutare l’espressione.

È ansible controllare questa domanda SO per ulteriori informazioni su questo problema.

Stavo sperimentando lo stesso messaggio di errore nel debugger di Visual Studio durante la valutazione di un’espressione linq.

Disabilitare l’impostazione di configurazione del debugger VS ‘Abilita solo il mio codice’ ha risolto il problema per me:

Per abilitare o disabilitare Just My Code, selezionare il menu Strumenti> Opzioni in Visual Studio. Nel nodo Debug> Generale, selezionare o deselezionare Abilita solo il mio codice.

studio visivo abilita solo il mio codice

https://docs.microsoft.com/en-us/visualstudio/debugger/just-my-code