Visualizzare thread e attività nella finestra Stack paralleli (C#, Visual Basic, C++)

La finestra Stack paralleli è utile per il debug di applicazioni multithreading. Include diverse visualizzazioni:

Usare la finestra Stack in parallelo

Per aprire la finestra Stack paralleli , è necessario trovarsi in una sessione di debug. Selezionare Debug>stack paralleli di Windows.>

Controlli della barra degli strumenti

Nella finestra Stack paralleli sono disponibili i controlli della barra degli strumenti seguenti:

Screenshot of Toolbar in Parallel Stacks window.

Icon CTRL Descrizione
Threads/Tasks combo box /Casella combinata Attività thread Consente di passare dalla visualizzazione degli stack di chiamate dei thread alla visualizzazione degli stack di chiamate delle attività e viceversa. Per altre informazioni, vedere Visualizzazione Attività e Visualizzazione Thread.
Show Only Flagged icon Mostra solo con contrassegno Mostra gli stack di chiamate solo per i thread contrassegnati in altre finestre del debugger, ad esempio la finestra Thread GPU e la finestra Espressione di controllo parallelo.
Toggle Method View icon Attiva/Disattiva visualizzazione metodo Passa tra le visualizzazioni dello stack di chiamate e la visualizzazione metodo. Per altre informazioni, vedere Visualizzazione metodo.
Auto Scroll to Current icon Scorrimento automatico a stack frame corrente Esegue automaticamente la registrazione del grafico in modo che il frame dello stack corrente sia visualizzato. Questa funzionalità è utile quando si modifica il frame dello stack corrente da altre finestre o quando si raggiunge un nuovo punto di interruzione in grafici di grandi dimensioni.
Toggle Zoom icon Attiva/Disattiva controllo zoom Visualizza o nasconde il controllo zoom a sinistra della finestra.

Indipendentemente dalla visibilità del controllo zoom, è anche possibile eseguire lo zoom premendo CTRL e girando la rotellina del mouse oppure premendo CTRL+MAIUSC++ per eseguire lo zoom avanti e CTRL+MAIUSC+- per eseguire lo zoom indietro.

Screenshot of Toolbar in Parallel Stacks window 2022.

Icon CTRL Descrizione
Threads/Tasks combo box /Casella combinata Attività thread Consente di passare dalla visualizzazione degli stack di chiamate dei thread alla visualizzazione degli stack di chiamate delle attività e viceversa. Per altre informazioni, vedere Visualizzazione Attività e Visualizzazione Thread.
Filter icon Controllo filtro Mostra gli stack di chiamate solo per il set specifico di thread a cui si è interessati.
Show Only Flagged icon Mostra solo con contrassegno Mostra gli stack di chiamate solo per i thread contrassegnati in altre finestre del debugger, ad esempio la finestra Thread GPU e la finestra Espressione di controllo parallelo.
Toggle Method View icon Attiva/Disattiva visualizzazione metodo Passa tra le visualizzazioni dello stack di chiamate e la visualizzazione metodo. Per altre informazioni, vedere Visualizzazione metodo.
Auto Scroll to Current icon Scorrimento automatico a stack frame corrente Esegue automaticamente la registrazione del grafico in modo che il frame dello stack corrente sia visualizzato. Questa funzionalità è utile quando si modifica il frame dello stack corrente da altre finestre o quando si raggiunge un nuovo punto di interruzione in grafici di grandi dimensioni.
Toggle Zoom icon Attiva/Disattiva controllo zoom Visualizza o nasconde il controllo zoom a sinistra della finestra.

Indipendentemente dalla visibilità del controllo zoom, è anche possibile eseguire lo zoom premendo CTRL e girando la rotellina del mouse oppure premendo CTRL+MAIUSC++ per eseguire lo zoom avanti e CTRL+MAIUSC+- per eseguire lo zoom indietro.
Search icon Controllo di ricerca Con questa funzionalità è possibile eseguire facilmente ricerche tra stack frame e quindi usare le frecce per spostarsi tra questi risultati.
Save icon Salva controllo Consente di salvare/esportare il contenuto dalla finestra dello stack parallelo come immagine.
External Code icon Mostra controllo codice esterno Usando questa funzionalità, è possibile mostrare/nascondere gli stack dal codice o dalle librerie esterne.

Icone stack frame

Le icone seguenti forniscono informazioni sugli stack frame attivi e correnti in tutte le visualizzazioni:

Icon Descrizione
Yellow arrow Indica la posizione corrente (stack frame attivo) del thread corrente.
Threads icon Indica la posizione corrente (stack frame attivo) di un thread non corrente.
Green arrow Indica il frame dello stack corrente (contesto del debugger corrente). Il nome del metodo è in grassetto ovunque venga visualizzato.
Icon Descrizione
Yellow arrow Indica la posizione corrente (stack frame attivo) del thread corrente.
Threads icon Indica la posizione corrente (stack frame attivo) di un thread non corrente.
Green arrow Indica il frame dello stack corrente (contesto del debugger corrente). Il nome del metodo è in grassetto ovunque venga visualizzato.
Status Error Indica che lo stack frame corrente ha un avviso di stato critico, ad esempio Deadlock.
Status Excluded Indica il nodo con deadlock.
Status Information Indica che il frame dello stack corrente contiene informazioni aggiuntive, ad esempio In attesa su, In attesa di blocco, di proprietà di e così via.
Status Blocked Indica che l'attività corrente è in stato di blocco/attesa e così via.
Status Running Indica che l'attività attualmente in esecuzione.

Voci del menu di scelta rapida

Quando si fa clic con il pulsante destro del mouse su un metodo nella visualizzazione Thread o nella visualizzazione Attività , sono disponibili le voci di menu di scelta rapida seguenti. Gli ultimi sei elementi sono gli stessi della finestra Stack di chiamate.

Screenshot of Shortcut menu in Parallel Stacks window.

Voce di menu Descrizione
Flag Contrassegna l'elemento selezionato.
Rimuovi flag Rimuove il flag dall'elemento selezionato.
Blocca Blocca l'elemento selezionato.
Sblocca Sblocca l'elemento selezionato.
Passa al frame Uguale al comando di menu corrispondente nella finestra Stack di chiamate. Nella finestra Stack paralleli, tuttavia, un metodo può essere in più fotogrammi . È possibile selezionare la cornice desiderata nel sottomenu per questo elemento. Se uno degli stack frame si trova nel thread corrente, tale frame viene selezionato per impostazione predefinita nel sottomenu.
Passare a Attività o Vai al thread Passa alla visualizzazione Attività o Thread e mantiene evidenziato lo stesso stack frame.
Vai a codice sorgente Passa alla posizione corrispondente nella finestra del codice sorgente.
Vai a disassembly Passa alla posizione corrispondente nella finestra Disassembly .
Mostra codice esterno Mostra o nasconde il codice esterno.
Visualizzazione esadecimale Consente di passare dalla visualizzazione decimale a quella esadecimale e viceversa.
Mostra thread nell'origine Contrassegna la posizione del thread nella finestra del codice sorgente.
Informazioni sul caricamento simboli Apre la finestra di dialogo Informazioni caricamento simboli.
Impostazioni simboli Apre la finestra di dialogo Simbolo Impostazioni.

Screenshot of Shortcut menu in Parallel Stacks window 2022.

Voce di menu Descrizione
Copia Copiare l'elemento selezionato.
Selezionare tutti i fotogrammi seguenti Seleziona tutti i fotogrammi nello stack selezionato.
Flag Contrassegna l'elemento selezionato.
Rimuovi flag Rimuove il flag dall'elemento selezionato.
Blocca Blocca l'elemento selezionato.
Sblocca Sblocca l'elemento selezionato.
Passa al frame Uguale al comando di menu corrispondente nella finestra Stack di chiamate. Nella finestra Stack paralleli, tuttavia, un metodo può essere in più fotogrammi . È possibile selezionare la cornice desiderata nel sottomenu per questo elemento. Se uno degli stack frame si trova nel thread corrente, tale frame viene selezionato per impostazione predefinita nel sottomenu.
Passare a Attività o Vai al thread Passa alla visualizzazione Attività o Thread e mantiene evidenziato lo stesso stack frame.
Vai a codice sorgente Passa alla posizione corrispondente nella finestra del codice sorgente.
Vai a disassembly Passa alla posizione corrispondente nella finestra Disassembly .
Mostra codice esterno Mostra o nasconde il codice esterno.
Visualizzazione esadecimale Consente di passare dalla visualizzazione decimale a quella esadecimale e viceversa.
Mostra thread nell'origine Contrassegna la posizione del thread nella finestra del codice sorgente.
Informazioni sul caricamento simboli Apre la finestra di dialogo Informazioni caricamento simboli.
Impostazioni simboli Apre la finestra di dialogo Simbolo Impostazioni.

visualizzazione thread

Nella visualizzazione Thread il frame dello stack e il percorso di chiamata del thread corrente sono evidenziati in blu. La posizione corrente del thread viene visualizzata dalla freccia gialla.

Per modificare lo stack frame corrente, fare doppio clic su un metodo diverso. Questo potrebbe anche cambiare il thread corrente, a seconda che il metodo selezionato faccia parte del thread corrente o di un altro thread.

Quando il grafico di visualizzazione Thread è troppo grande per adattarsi alla finestra, nella finestra viene visualizzato un controllo Visualizzazione occhio di uccello. È possibile spostare la cornice nel controllo per passare a diverse parti del grafico.

La figura seguente mostra un thread che passa da Main a una transizione da codice gestito a nativo. Sei thread si trovano nel metodo corrente. Uno continua a Thread.Sleep e un altro continua a Console.WriteLine e quindi a SyncTextWriter.WriteLine.

Screenshot of Threads view in Parallel Stacks window.

Nella tabella seguente vengono descritte le funzionalità principali della visualizzazione Thread :

Callout Nome dell'elemento Descrizione
1 Segmento o nodo dello stack di chiamate Contiene una serie di metodi per uno o più thread. Se al fotogramma non sono collegate linee di direzione, il fotogramma mostra l'intero percorso di chiamata per i thread.
2 Evidenziazione blu Indica il percorso di chiamate del thread corrente.
3 Righe della freccia Connettono i nodi per costituire l'intero percorso di chiamate per i thread.
4 Intestazione del nodo Mostra il numero di processi e thread per il nodo.
5 metodo Rappresenta uno o più stack frame nello stesso metodo.
6 Descrizione comando sul metodo Viene visualizzato quando si passa il puntatore del mouse su un metodo. Nella visualizzazione Thread la descrizione comando mostra tutti i thread, in una tabella simile alla finestra Thread .

La figura seguente mostra un thread che passa da Main a una transizione da codice gestito a nativo. Cinque thread si trovano nel metodo corrente. Uno continua a ServerClass.InstanceMethod e un altro continua a Worker.Thread.Start e quindi a StartupHook.Initialize.AnonymousMethod.

Screenshot of Threads view in Parallel Stacks window 2022.

Nella tabella seguente vengono descritte le funzionalità principali della visualizzazione Thread :

Callout Nome dell'elemento Descrizione
1 Segmento o nodo dello stack di chiamate Contiene una serie di metodi per uno o più thread. Se al fotogramma non sono collegate linee di direzione, il fotogramma mostra l'intero percorso di chiamata per i thread.
2 Evidenziazione blu Indica il percorso di chiamate del thread corrente.
3 Righe della freccia Connettono i nodi per costituire l'intero percorso di chiamate per i thread.
4 Intestazione del nodo Mostra il numero di processi/thread, nome del thread e ID del thread per il nodo.
5 metodo Rappresenta uno o più stack frame nello stesso metodo.
6 Descrizione comando sul metodo Viene visualizzato quando si passa il puntatore del mouse su un metodo. Nella visualizzazione Thread la descrizione comando mostra tutti i thread, in una tabella simile alla finestra Thread .

Visualizzazione Attività

Se l'app usa System.Threading.Tasks.Task oggetti (codice gestito) o task_handle oggetti (codice nativo) per esprimere il parallelismo, è possibile usare la visualizzazione Attività . La visualizzazione Attività mostra gli stack di chiamate delle attività anziché dei thread.

Nella visualizzazione Attività :

  • Gli stack di chiamate di thread che non eseguono attività non vengono visualizzati.
  • Gli stack di chiamate dei thread che eseguono attività vengono tagliati visivamente nella parte superiore e inferiore per mostrare i fotogrammi più rilevanti per le attività.
  • Quando più attività si trovano in un solo thread, gli stack di chiamate di tali attività vengono visualizzati in nodi separati.

Per visualizzare un intero stack di chiamate, tornare alla visualizzazione Thread facendo clic con il pulsante destro del mouse su uno stack frame e selezionando Vai al thread.

La figura seguente mostra la visualizzazione Thread nella parte superiore e la visualizzazione Attività corrispondente nella parte inferiore.

Screenshot of Threads and Tasks views.

Screenshot of Tasks view in Parallel Stacks window.

Passare il puntatore del mouse su un metodo per visualizzare una descrizione comando con informazioni aggiuntive. Nella visualizzazione Attività la descrizione comando mostra tutte le attività in una tabella simile alla finestra Attività .

L'immagine seguente mostra la descrizione comando per un metodo nella visualizzazione Thread nella parte superiore e per la visualizzazione Attività corrispondente nella parte inferiore.

Screenshot of Threads and Tasks tooltips.

Screenshot of Threads and Tasks tooltips.

Visualizzazione metodo

Nella visualizzazione Thread o Nella visualizzazione Attività è possibile pivotare il grafico nel metodo corrente selezionando l'icona Attiva/Disattiva visualizzazione metodo sulla barra degli strumenti. La visualizzazione Metodo mostra immediatamente tutti i metodi in tutti i thread che chiamano o sono chiamati dal metodo corrente. La figura seguente mostra l'aspetto delle stesse informazioni nella visualizzazione Thread a sinistra e in Visualizzazione metodo a destra.

Screenshot of Methods view in Parallel Stacks window.

Screenshot of Methods view in Parallel Stacks window 2022.

Se si passa a un nuovo stack frame, si imposta tale metodo sul metodo corrente e La visualizzazione metodo mostra tutti i chiamanti e i chiamato per il nuovo metodo. È possibile che, in conseguenza a ciò, alcuni thread compaiano o scompaiano dalla visualizzazione, a seconda che il metodo sia visualizzato nei relativi stack di chiamate. Per tornare alla visualizzazione stack di chiamate, selezionare di nuovo l'icona della barra degli strumenti Visualizzazione metodo.

Esercitazione video su thread e attività di debug con stack paralleli

Queste esercitazioni video illustrano come usare le visualizzazioni Thread e attività della finestra Stack paralleli in Visual Studio 2022 per eseguire il debug delle applicazioni multithreading.