Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Testo completo del messaggio: valutazione del timeout della funzione 'function' e necessità di essere interrotta in modo non sicuro. Questo potrebbe aver danneggiato il processo di destinazione.
Per semplificare l'ispezione dello stato degli oggetti .NET, il debugger forza automaticamente il processo sottoposto a debug per eseguire codice aggiuntivo (in genere i metodi getter delle proprietà e le funzioni ToString). Nella maggior parte degli scenari, queste funzioni vengono completate rapidamente e semplificano il debug. Tuttavia, il debugger non esegue l'applicazione in una sandbox. Di conseguenza, un metodo getter o ToString di proprietà che chiama in una funzione nativa che smette di rispondere può causare timeout lunghi che potrebbero non essere recuperabili. Se viene visualizzato questo messaggio di errore, si è verificato questo errore.
Un motivo comune per questo problema è che quando il debugger valuta una proprietà, consente solo l'esecuzione del thread da esaminare. Pertanto, se la proprietà è in attesa di altri thread da eseguire all'interno dell'applicazione di cui è stato eseguito il debug e se è in attesa in un modo in cui il runtime .NET non è in grado di interrompere, questo problema si verificherà.
Per correggere l'errore
Vedere le sezioni seguenti per diverse possibili soluzioni a questo problema.
Soluzione 1: Impedire al debugger di chiamare la proprietà getter o il metodo ToString
Il messaggio di errore indica il nome della funzione che il debugger ha tentato di chiamare. Se è possibile modificare questa funzione, è possibile impedire al debugger di chiamare il metodo getter o ToString della proprietà. Provare a eseguire una delle operazioni seguenti:
Modificare il metodo in un altro tipo di codice oltre a un metodo getter o ToString di proprietà e il problema andrà via.
oppure
(Per ToString) Definire un attributo DebuggerDisplay sul tipo ed è possibile fare in modo che il debugger valuti un valore diverso da ToString.
oppure
(Per un getter di proprietà) Inserire l'attributo System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never) sulla proprietà . Questo può essere utile se si dispone di un metodo che deve rimanere una proprietà per motivi di compatibilità dell'API, ma deve essere davvero un metodo.
Soluzione 2: Chiedere al debugger di interrompere la valutazione nel codice di destinazione
Il messaggio di errore indica il nome della funzione che il debugger ha tentato di chiamare. Se il metodo getter o ToString della proprietà talvolta non viene eseguito correttamente, soprattutto in situazioni in cui il problema è che il codice richiede un altro thread per eseguire il codice, la funzione di implementazione può chiamare System.Diagnostics.Debugger.NotifyOfCrossThreadDependency per chiedere al debugger di interrompere la valutazione della funzione. Con questa soluzione, è comunque possibile valutare in modo esplicito queste funzioni, ma il comportamento predefinito è che l'esecuzione si arresta quando si verifica la chiamata NotifyOfCrossThreadDependency.
Soluzione n. 3: Disabilitare tutta la valutazione implicita
Se le soluzioni precedenti non risolessero il problema, passare a Strumenti>Opzioni e deselezionare l'impostazione Debug>generale>Abilita valutazione delle proprietà e altre chiamate di funzione implicite. Ciò disabiliterà la maggior parte delle valutazioni di funzione implicite e dovrebbe risolvere il problema.
Soluzione 4: Verificare la compatibilità con gli strumenti di sviluppo di terze parti
Se si usa Resharper, vedere questo problema per i suggerimenti.
Soluzione 5: Abilitare la modalità di compatibilità gestita
Se si passa al motore di debug legacy, è possibile eliminare questo errore. Passare a Opzioni strumenti>e selezionare l'impostazione Debug>generale>Usa modalità di compatibilità gestita. Per altre informazioni, vedere Opzioni generali di debug.