Condividi tramite


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

La finestra stack paralleli è utile per il debug di applicazioni multithread. Ha diverse visualizzazioni.

Usare la finestra Stack paralleli

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

Controlli barra degli strumenti

La finestra Stack Paralleli contiene i seguenti controlli della barra degli strumenti:

Screenshot della barra degli strumenti nella finestra

Icona Controllo Descrizione
casella combinata Thread/Task thread/Attività casella combinata Passa dalla visualizzazione degli stack di chiamate di thread a quella degli stack di chiamate di attività. Per ulteriori informazioni, vedere Visualizzazione attività e Visualizzazione thread.
Mostra icona contrassegnata solo Mostra solo i 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 attiva/disattiva visualizzazione metodo Attiva/Disattiva visualizzazione del metodo Passa tra le viste dello stack di chiamate e la 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 di attivazione/disattivazione dello zoom 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 di Stacks Paralleli 2022.

Icona Controllo Descrizione
casella combinata Thread/Task casella combinata Thread/Attività Cambia la visualizzazione tra gli stack delle chiamate dei thread e gli stack delle chiamate delle attività. 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.
Attiva/Disattiva icona visualizzazione metodo Attiva/Disattiva visualizzazione metodo Passa tra le viste dello stack di chiamate e vista dei metodi. Per altre informazioni, vedere Method View.
Scorrimento automatico all'icona attuale Scorrimento automatico fino allo stack frame corrente Scorre automaticamente il grafico in modo che il frame dello stack corrente sia visibile. 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 attiva/disattiva zoom 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.
icona di salvataggio Salva controllo Consente di salvare/esportare il contenuto dalla finestra dello stack parallelo come immagine.
icona codice esterno Mostra il controllo del codice esterno Usando questa funzionalità, è possibile mostrare/nascondere gli stack dal codice o dalle librerie esterne.

Icone dei frame dello stack

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 Thread Indica la posizione corrente (stack frame attivo) di un thread non corrente.
freccia verde Indica il frame dello stack corrente (contesto del debugger corrente). 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 il frame corrente dello stack (il contesto corrente 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 corrente dello stack contiene informazioni aggiuntive, come 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 che l'attività è attualmente in esecuzione.

Voci del menu contestuale

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

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.
Scongelare Scongela l'elemento selezionato.
Passare al frame Uguale al comando del menù corrispondente nella finestra pila delle chiamate. Tuttavia, nella finestra di stack paralleli, un metodo può essere in diversi 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.
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 dei simboli Apre la finestra di dialogo informazioni sul caricamento dei simboli.
impostazioni simbolo Apre la finestra di dialogo impostazioni simbolo .

Screenshot del menu di scelta rapida nella finestra Stacks paralleli 2022.

Voce di menu Descrizione
Copia Copiare l'elemento selezionato.
selezionare tutti i frame sotto Seleziona tutti i fotogrammi nello stack selezionato.
Bandiera Contrassegna l'elemento selezionato.
Rimuovi segnalazione 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 Call Stack. Tuttavia, nella finestra di Parallel Stacks, un metodo può trovarsi 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 alla 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 Passe 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 fonte di origine Contrassegna la posizione del thread nella finestra del codice sorgente.
Informazioni sul Caricamento dei Simboli Apre la finestra di dialogo informazioni sul caricamento dei simboli .
impostazioni dei simboli Apre la finestra di dialogo Impostazioni Simbolo.

Visualizzazione Discussioni

In visualizzazione 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, viene visualizzato nella finestra un controllo vista a volo d'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. Due thread continuano a Thread.Sleep e due continuano a Console.WriteLine e il thread corrente continua a SyncTextWriter.WriteLine.

Screenshot della visualizzazione Threads nella finestra Stacks Paralleli.

Nella tabella seguente vengono descritte le funzionalità 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 con frecce, il fotogramma mostra l'intero percorso di chiamata 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ù frame di stack nello stesso metodo.
6 Suggerimento sul metodo Viene visualizzato quando si passa il puntatore del mouse su un metodo. In visualizzazione Thread la descrizione comando 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. Cinque thread si trovano nel metodo corrente. Quattro thread continuano a essere eseguiti nel contesto del metodo S.C, mentre un thread di lavoro continua in una transizione di codice gestito a nativo, impostando il nome in un thread di lavoro.

Screenshot della vista Thread nella finestra Stack paralleli 2022.

Nella tabella seguente vengono descritte le funzionalità 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 frame non sono collegate linee di frecce, il frame mostra l'intero percorso di chiamata 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 visualizzazione Threads, il tooltip mostra tutti i thread, in una tabella simile alla finestra Threads.
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. visualizzazione Attività mostra stack di chiamate di attività anziché thread.

Nella visualizzazione di (Attività):

  • Gli stack di chiamate di thread che non eseguono attività non vengono visualizzati.
  • Gli stack di chiamate dei thread che eseguono attività vengono visivamente ridotti 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 a thread visualizzazione 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 delle visualizzazioni Thread e Attività.

Passare 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 dei tooltip di Threads e Tasks.

Visualizzazione metodo

Dalla visualizzazione Thread o dalla visualizzazione Task, è possibile ruotare il grafico sul metodo attuale selezionando l'icona Attiva/Disattiva Visualizzazione Metodo sulla barra degli strumenti. Modalità Visualizzazione mostra a colpo d'occhio tutti i metodi in tutti i thread che richiamano o sono richiamati dal metodo corrente. Nella figura seguente viene illustrato l'aspetto delle stesse informazioni nella visualizzazione Thread a sinistra e nella visualizzazione Metodo a destra.

Se si passa a un nuovo stack frame, si rende tale metodo quello 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 visualizzazione dello 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.