Debug di applicazioni multithreading in Visual Studio
Un thread è una sequenza di istruzioni in base alla quale il sistema operativo esegue l'allocazione del tempo processore. Ogni processo in esecuzione nel sistema operativo è composto da almeno un thread. I processi composti da più di un thread sono detti multithreading.
I computer multiprocessore, i processori multicore e i processi hyperthreading sono in grado di eseguire contemporaneamente più thread. Se da un lato l'elaborazione parallela di più thread può migliorare notevolmente le prestazioni dei programmi, dall'altro può rendere il debug più difficoltoso poiché introduce la necessità di tenere traccia di più thread.
Il multithreading introduce inoltre nuovi tipi di possibili bug. Accade spesso, ad esempio, che due o più thread debbano accedere alla stessa risorsa, alla quale però può accedere un solo thread alla volta. Deve necessariamente esistere una qualche forma di esclusione reciproca per garantire l'accesso alla risorsa di un solo thread alla volta. Se l'esclusione reciproca non viene eseguita in modo corretto, può venirsi a creare una condizione di deadlock in cui non è possibile eseguire alcun thread. I deadlock possono rappresentare un problema particolarmente difficile da risolvere con il debug.
Visual Studio 2012 fornisce una finestra Thread migliorata, la nuova finestra Thread GPU, la nuova finestra Espressioni di controllo in parallelo e altri miglioramenti dell'interfaccia utente per eseguire più facilmente il debug multithreading. Il modo migliore per acquisire altre informazioni sulle nuove funzionalità dell'interfaccia di threading consiste nell'eseguire le procedure dettagliate. Vedere Procedura dettagliata: debug di un'applicazione multithreading e Procedura dettagliata: debug di un'applicazione C++ AMP.
Visual Studio offre anche potenti punti di interruzione e punti di analisi che possono rivelarsi molto utili per il debug di applicazioni multithreading. È possibile applicare filtri dei punti di interruzione per inserire punti di interruzione in corrispondenza di singoli thread. Vedere Punti di interruzione: utilizzare passaggi, funzioni sullo stack di chiamate e condizioni per interrompere nel punto e nel momento desiderati il debugger di Visual Studio
Il debug di un'applicazione multithreading dotata di un'interfaccia utente può essere particolarmente complesso. In tal caso, potrebbe essere necessario eseguire l'applicazione in un secondo computer e utilizzare il debug remoto. Per informazioni, vedere Debug e diagnostica remoti.
In questa sezione
Procedura: utilizzare la finestra Thread
Procedure utili per il debug dei thread mediante la finestra Thread.Procedura: passare a un altro thread durante il debug
Tre modi per passare il contesto di debug a un altro thread.Procedura: impostare e rimuovere i flag dei thread
Aggiunta di contrassegni o flag ai thread a cui è opportuno prestare particolare attenzione durante il debug.Procedura: impostare il nome di un thread in codice nativo
Attribuzione di un nome da visualizzare nella finestra Thread.Procedura: impostare il nome di un thread in codice gestito
Attribuzione di un nome da visualizzare nella finestra Thread.Procedura dettagliata: debug di un'applicazione multithreading .
Presentazione guidata delle funzionalità di debug dei thread, con particolare attenzione alle funzionalità procedura Visual Studio 2008.Procedura: eseguire il debug su un cluster ad alte prestazioni
Tecniche per il debug di applicazioni in esecuzione su un cluster ad alte prestazioni.Suggerimenti per il debug dei thread in codice nativo
Semplici tecniche utili per il debug di thread nativi.Utilizzo della finestra Attività
Visualizza un elenco di tutti gli oggetti attività gestiti o nativi con il rispettivo stato e altre informazioni utili.Utilizzo della finestra Stack in parallelo
Visualizza gli stack di chiamate di più thread (o attività) in un'unica visualizzazione e riunisce inoltre i segmenti dello stack comuni ai vari thread (o attività).Procedura dettagliata: debug di un'applicazione parallela
Procedura dettagliata che illustra come utilizzare le finestre Attività in parallelo e Stack in parallelo.Procedura: utilizzare la finestra Espressione di controllo in parallelo
Controllare i valori e le espressioni in più thread.Procedura: utilizzare la finestra Thread GPU
Esaminare e utilizzare i thread in esecuzione sulla GPU durante il debug.
Sezioni correlate
-
Usare filtri dei punti di interruzione per inserire un punto di interruzione in corrispondenza di un singolo thread.
I punti di traccia consentono di tracciare l'esecuzione dei programmi senza interruzioni. Ciò può risultare utile nello studio di problemi quali i deadlock.
Threading gestito
Informazioni sul threading ed esempio di codice nella programmazione di .NET Framework.Multithreading nei componenti
Utilizzo del multithreading nei componenti di .NET Framework.Supporto del multithreading per il codice precedente (Visual C++)
Informazioni sul threading ed esempio di codice per programmatori C++ che utilizzano MFC.