Condividi tramite


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

La finestra Stack Paralleli è utile per il debugging di applicazioni multithreading. Dispone di diverse visualizzazioni:

Usare la finestra degli stack paralleli

Per aprire la finestra Stack Paralleli, è necessario trovarsi in una sessione di debug. Selezionare Debug>Parallel Stacks di Windows>.

Controlli barra degli strumenti

La finestra Stack Paralleli dispone dei controlli della barra degli strumenti seguenti:

Screenshot della barra degli strumenti nella finestra Stack Paralleli.

Icona Controllo Descrizione
casella combinata Thread/Attività casella combinata thread/attività Passa la visualizzazione tra gli stack di chiamate dei thread e gli stack di chiamate dei task. Per altre informazioni, vedere visualizzazione Attività e visualizzazione Thread.
Mostra icona contrassegnata solo Mostra solo contrassegnati Mostra gli stack di chiamate solo per i thread contrassegnati in altre finestre del debugger, come la finestra thread GPU e la finestra controllo parallelo.
icona Visualizzazione metodo attiva/disattiva Attiva/Disattiva visualizzazione metodo Passa tra le viste dello stack di chiamate e vista metodo. Per altre informazioni, vedere Method View.
Scorrimento automatico fino all'icona attuale Scorrimento automatico fino allo stack frame corrente Scorre automaticamente il grafico in modo che il frame di 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.
icona zoom attiva/disattiva 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 ruotando la rotellina del mouse oppure premendo CTRL+MAIUSC++ per ingrandire e CTRL+MAIUSC+- per eseguire lo zoom indietro.

Screenshot della barra degli strumenti nella finestra Parallel Stacks 2022.

Icona Controllo Descrizione
casella combinata Thread/Attività casella combinata thread/attività Passa la visualizzazione tra gli stack di chiamate dei thread e gli stack di chiamate dei task. Per altre informazioni, vedere visualizzazione Attività e visualizzazione Thread.
icona filtro Filtro Controllo Mostra gli stack di chiamate solo per il set specifico di thread a cui si è interessati.
Mostra icona contrassegnata solo Mostra solo contrassegnati Mostra gli stack di chiamate solo per i thread contrassegnati in altre finestre del debugger, come la finestra thread GPU e la finestra controllo parallelo.
icona Visualizzazione metodo attiva/disattiva Attiva/Disattiva visualizzazione metodo Passa tra le viste dello stack di chiamate e vista metodo. Per altre informazioni, vedere Method View.
Scorrimento automatico fino all'icona attuale Scorrimento automatico fino allo stack frame corrente Scorre automaticamente il grafico in modo che il frame di 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.
icona zoom attiva/disattiva 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 ruotando la rotellina del mouse oppure premendo CTRL+MAIUSC++ per ingrandire e CTRL+MAIUSC+- per eseguire lo zoom indietro.
icona di ricerca icona di ricerca Controllo di ricerca Con questa funzionalità è possibile eseguire facilmente ricerche tra stack frame e quindi usare le frecce per spostarsi tra questi risultati.
l'icona salva Salva controllo Consente di salvare/esportare il contenuto dalla finestra dello stack parallelo come immagine.
icona codice esterno Mostra controllo di codice esterno Usando questa funzionalità, è possibile mostrare/nascondere gli stack dal codice o dalle librerie esterne.
Copilot icona Riepilogo Riepilogare gli stack di chiamate A partire da Visual Studio 2022 versione 17.13 Preview 4, è possibile scegliere Riepiloga quando Copilot è installato e attivato. Questo pulsante apre la finestra Chat di Copilot, precaricata con il contesto pertinente del thread, consentendo di esplorare i dettagli, inclusi gli stati del thread, le chiamate di funzione e le correzioni suggerite.

Icone Stack Frame

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

Icona Descrizione
freccia gialla Indica la posizione corrente (stack frame attivo) del thread corrente.
Icona Threads Indica la posizione corrente (stack frame attivo) di un thread non corrente.
freccia verde Indica la cornice dello stack attuale (il contesto attuale del debugger). Il nome del metodo è in grassetto ovunque venga visualizzato.
Icona Descrizione
freccia gialla Indica la posizione corrente (stack frame attivo) del thread corrente.
Icona Threads Indica la posizione corrente (stack frame attivo) di un thread non corrente.
freccia verde Indica la cornice dello stack attuale (il contesto attuale del debugger). Il nome del metodo è in grassetto ovunque venga visualizzato.
errore di stato Indica che lo stack frame corrente ha un avviso di stato critico, ad esempio Deadlock.
Stato escluso Indica il nodo con deadlock.
informazioni sullo stato Indica che il frame dello stack corrente contiene informazioni aggiuntive, ad esempio In attesa di, In attesa di blocco, di proprietà di e così via.
stato bloccato Indica che l'attività corrente è in stato di blocco/attesa e così via.
stato in esecuzione Indica l'attività attualmente in esecuzione.

Elementi del menu di scelta rapida

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

Screenshot del menu di scelta rapida nella finestra Stack Paralleli.

Voce di menu Descrizione
Flag Contrassegna l'elemento selezionato.
deseleziona Annulla il flag dell'elemento selezionato.
Congela Blocca l'elemento selezionato.
Scongelamento Scongela l'elemento selezionato.
passare al frame Uguale al comando di menu corrispondente nella finestra dello stack di chiamate . Tuttavia, nella finestra di Parallel Stacks, un metodo può essere in diversi frame. È 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.
Vai all'attività o Vai alla discussione Passa alla visualizzazione attività o thread e mantiene evidenziato lo stesso stack frame.
Vai al codice sorgente Passa alla posizione corrispondente nella finestra del codice sorgente.
Vai allo smontaggio Passa alla posizione corrispondente nella finestra Disassembly.
Mostra codice esterno Mostra o nasconde il codice esterno.
, display esadecimale Attiva/disattiva la visualizzazione decimale ed esadecimale.
Mostra thread nella di origine Contrassegna la posizione del thread nella finestra del codice sorgente.
Informazioni sul caricamento del simbolo Apre la finestra di dialogo Informazioni sul caricamento dei simboli.
Impostazioni Simboli Apre la finestra di dialogo Impostazioni simbolo.

Screenshot del menu di scelta rapida nella finestra Stack Paralleli 2022.

Voce di menu Descrizione
Copia Copiare l'elemento selezionato.
Seleziona tutti i fotogrammi sottostanti Seleziona tutti i fotogrammi sotto la pila selezionata.
Flag Contrassegna l'elemento selezionato.
deseleziona Annulla il flag dell'elemento selezionato.
Congela Blocca l'elemento selezionato.
Scongelamento Scongela l'elemento selezionato.
passare al frame Uguale al comando di menu corrispondente nella finestra dello stack di chiamate . Tuttavia, nella finestra di Parallel Stacks, un metodo può essere in diversi frame. È 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.
Vai all'attività o Vai alla discussione Passa alla visualizzazione attività o thread e mantiene evidenziato lo stesso stack frame.
Vai al codice sorgente Passa alla posizione corrispondente nella finestra del codice sorgente.
Vai allo smontaggio Passa alla posizione corrispondente nella finestra Disassembly.
Mostra codice esterno Mostra o nasconde il codice esterno.
, display esadecimale Attiva/disattiva la visualizzazione decimale ed esadecimale.
Mostra thread nella di origine Contrassegna la posizione del thread nella finestra del codice sorgente.
Informazioni sul caricamento del simbolo Apre la finestra di dialogo Informazioni sul caricamento dei simboli.
Impostazioni Simboli Apre la finestra di dialogo Impostazioni simbolo.

Visualizzazione Discussione

In vista Thread, lo stack frame 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 rientrare nella finestra, nella finestra appare un controllo di visualizzazione dall'alto . È 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. Nel metodo corrente sono presenti sei thread. Due thread continuano a Thread.Sleep e due continuano a Console.WriteLine e il thread corrente continua a SyncTextWriter.WriteLine.

Screenshot della visualizzazione dei thread nella finestra Stacks paralleli.

Nella tabella seguente vengono descritte le caratteristiche principali della vista thread:

Callout Nome 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 freccia, il fotogramma mostra l'intero percorso delle chiamate per i thread.
2 Evidenziazione blu Indica il percorso della chiamata del thread corrente.
3 Linee freccia Connettere i nodi per creare l'intero percorso di chiamata 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 Suggerimento sul metodo Viene visualizzato quando si passa il puntatore del mouse su un metodo. In vista Thread, il tooltip mostra tutti i thread, in una tabella simile alla finestra Thread .

La figura seguente mostra il thread principale in una transizione da codice gestito a nativo. Attualmente ci sono cinque thread nel metodo. Quattro thread continuano a essere eseguiti nel contesto del metodo S.C, mentre un thread di lavoro continua in una transizione da codice gestito a codice nativo, assegnando un nome a un thread di lavoro.

Screenshot della visualizzazione dei thread nella finestra Pile parallele 2022.

Nella tabella seguente vengono descritte le caratteristiche principali della vista thread:

Callout Nome 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 freccia, il fotogramma mostra l'intero percorso delle chiamate per i thread.
2 Evidenziazione blu Indica il percorso della chiamata del thread corrente.
3 Linee freccia Connettere i nodi per creare l'intero percorso di chiamata 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 Suggerimento sul metodo Viene visualizzato quando si passa il puntatore del mouse su un metodo. In vista Thread, il tooltip mostra tutti i thread, in una tabella simile alla finestra Thread .
7 Descrizione del thread Descrizione generata dall'intelligenza artificiale del thread. A partire da Visual Studio 2022 versione 17.13 Preview 1, questa descrizione è presente quando Copilot è installato e attivato.

Visualizzazione Attività

Se l'app usa oggetti System.Threading.Tasks.Task (codice gestito) o oggetti task_handle (codice nativo) per esprimere il parallelismo, è possibile usare attività visualizzazione. vista Attività mostra stack di chiamate per attività anziché 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à sono visivamente ridotti nella parte superiore e inferiore, per mostrare i frame 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, torna alla vista Thread facendo clic con il tasto destro del mouse su un frame dello stack e selezionando Vai al Thread.

La figura seguente mostra la visualizzazione thread nella parte superiore e la visualizzazione attività corrispondente nella parte inferiore.

Screenshot delle visualizzazioni Thread e Attività.

Spostare il puntatore del mouse su un metodo per visualizzare un tooltip con informazioni aggiuntive. In 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 delle descrizioni comandi di Thread e Attività.

Visualizzazione metodo

Dalla visualizzazione Thread o dalla visualizzazione Attività, è possibile pivotare il grafico sul metodo corrente selezionando l'icona Attiva/disattiva visualizzazione metodo sulla barra degli strumenti. visualizzazione metodo mostra a colpo d'occhio tutti i metodi su tutti i thread che chiamano o vengono chiamati dal metodo corrente. Nella figura seguente viene illustrato l'aspetto delle stesse informazioni nella vista thread a sinistra e nella vista metodo a destra.

Se passi a un nuovo stack frame, imposti quel metodo come metodo corrente e Visualizzazione metodo mostra tutti i chiamanti e i chiamati per il nuovo metodo. Ciò può causare la visualizzazione o la scomparsa di alcuni thread dalla visualizzazione, a seconda che tale metodo venga visualizzato negli stack di chiamate. Per tornare alla vista della pila delle chiamate, selezionare nuovamente l'icona della barra degli strumenti Metodo Visualizzazione.

Videotutorial per il debug di thread e attività 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.