Condividi tramite


Procedura: utilizzare la finestra Thread

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Standard

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

Pro e Team

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

Legenda tabella:

Argomento applicabile

Applicabile

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

Nella finestra Thread è possibile esaminare e modificare i thread del programma sottoposto a debug.

Nella finestra Thread è disponibile un elenco di tutti i thread attualmente presenti nel programma. Per ogni thread incluso nell'elenco vengono fornite informazioni utili specifiche:

  • Nelle colonne Nome e ID vengono riportati il nome e il numero di identificazione del thread per consentirne l'identificazione.

  • Nella colonna Priorità viene indicata la priorità o la precedenza assegnata dal sistema a ogni thread.

  • Nella colonna Sospendi viene indicato il conteggio di sospensione che determina se un thread è attualmente in grado di essere eseguito. Per una spiegazione del conteggio di sospensione, vedere la sezione Blocco e sblocco dei thread nel presente argomento.

  • Nella colonna Categoria i thread vengono classificati come thread di interfaccia utente, gestori delle chiamate a una procedura remota o thread di lavoro. In questa colonna viene inoltre identificato il thread principale.

  • Nella colonna Percorso viene indicato il percorso di origine in cui è stato creato un thread.

  • La colonna dei flag è senza etichetta e si trova all'estrema sinistra. Quando si imposta un flag per un thread che si desidera esaminare, in questa colonna viene visualizzata un'icona del flag. Per istruzioni su come impostare i flag dei thread, vedere Procedura: impostare e rimuovere i flag dei thread.

  • Infine, è presente un'altra colonna senza etichetta, la seconda da sinistra. Si tratta della colonna dei thread attivi. Una freccia gialla in questa colonna indica un thread attivo.

Per visualizzare la finestra Thread in modalità di interruzione o di esecuzione

  • Scegliere Finestre dal menu Debug, quindi Thread.

Per ordinare l'elenco di thread

  1. Nella finestra Thread fare clic sul pulsante all'inizio di una colonna.

    • Per ordinare l'elenco con i thread con flag all'inizio, fare clic sul pulsante all'estrema sinistra.

    • Per ordinare l'elenco con i thread attivi all'inizio, fare clic sul secondo pulsante da sinistra.

    • Per ordinare l'elenco con i thread con i numeri ID più bassi all'inizio, fare clic sul pulsante ID.

    • Per ordinare l'elenco di thread in base alla categoria, fare clic sul pulsante Categoria. In questo modo i thread vengono ordinati in categorie funzionali in ordine alfabetico.

    • Per ordinare i thread in base al nome, fare clic sul pulsante Nome.

    • Per ordinare i thread in base ai percorsi di origine, fare clic sul pulsante Percorso.

    • Per ordinare l'elenco con i thread con la priorità più elevata all'inizio, fare clic sul pulsante Priorità.

    • Per ordinare l'elenco con i thread con i conteggi di sospensione più bassi all'inizio, fare clic sul pulsante Sospendi.

  2. Per invertire l'ordine, fare nuovamente clic sullo stesso pulsante. Se, ad esempio, si ordina in base al numero ID del thread, l'elenco viene ordinato con i thread con i numeri ID più bassi all'inizio. Se si fa nuovamente clic sul pulsante ID, l'elenco verrà ordinato con i thread con i numeri ID più alti all'inizio.

Per passare il contesto di debug a un altro thread

  • Nella finestra Thread fare clic con il pulsante destro del mouse su un thread e scegliere Passa al thread dal menu di scelta rapida.

    oppure

  • Fare doppio clic su un thread.

    Il thread attivo è identificato da una freccia gialla.

Blocco e sblocco dei thread

I thread possono essere bloccati o sbloccati. Quando un thread viene bloccato, l'esecuzione del thread non viene avviata anche se le risorse sono disponibili.

Nel codice nativo i thread possono essere sospesi o ripresi chiamando le funzioni Windows SuspendThread e ResumeThread o le funzioni MFC CWinThread::SuspendThread e CWinThread::ResumeThread. Se si chiama SuspendThread o ResumeThread, viene modificato il conteggio di sospensione visualizzato nella finestra Thread. Mentre se si blocca o sblocca un thread in codice nativo, il conteggio di sospensione non viene modificato. Nel codice nativo un thread può essere eseguito solo se è sbloccato e con un conteggio di sospensione di zero.

Se nel codice gestito si blocca o sblocca un thread, il conteggio di sospensione non viene modificato. Nel codice gestito un thread bloccato ha un conteggio di sospensione di 1, mentre nel codice nativo un thread bloccato ha un conteggio di sospensione di 0, a meno che il thread non sia stato sospeso da una chiamata a SuspendThread.

Nota:

Durante il debug di una chiamata da codice nativo a codice gestito, il codice gestito viene eseguito nello stesso thread fisico del codice nativo che lo ha chiamato. Sospendendo o bloccando l'esecuzione del thread di codice nativo si otterrà anche il blocco del codice gestito.

Per bloccare l'esecuzione di un thread

  • Nella finestra Thread fare clic con il pulsante destro del mouse su un thread e scegliere Blocca dal menu di scelta rapida.

Per sbloccare l'esecuzione di un thread

  • Nella finestra Thread fare clic con il pulsante destro del mouse su un thread bloccato e scegliere Sblocca dal menu di scelta rapida.

Visualizzazione degli stack di chiamate dei thread e passaggio da un frame all'altro

In un programma multithread ogni thread dispone di un proprio stack di chiamate. Nella finestra Thread è possibile visualizzare gli stack di chiamate dei thread.

Per visualizzare lo stack di chiamate di un thread

  • Nella finestra Thread posizionare il puntatore del mouse nella colonna dei thread attivi in corrispondenza della riga relativa al thread che si desidera esaminare.

    Verrà visualizzato un suggerimento dati in cui viene riportato lo stack di chiamate per il thread.

Vedere anche

Attività

Procedura dettagliata: debug di un'applicazione multithreading

Altre risorse

Debug di applicazioni multithreading