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.
visualizzazione Thread mostra le informazioni sullo stack di chiamate per tutti i thread nell'app. È possibile navigare tra i thread e i relativi stack frame.
visualizzazione Attività mostra informazioni sullo stack di chiamate incentrate sulle attività.
- Nel codice gestito, visualizzazione Attività mostra gli stack di chiamate di oggetti System.Threading.Tasks.Task.
- Nel codice nativo, visualizzazione Attività mostra gli stack di chiamate dei gruppi di attività , algoritmi paralleli, agenti asincronie attività leggere.
Visualizzazione Metodo modifica la visualizzazione dello stack di chiamate in base a un metodo selezionato.
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:
Icona | Controllo | Descrizione |
---|---|---|
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 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. | |
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 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. | |
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 | Controllo | Descrizione |
---|---|---|
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 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 visualizzazione metodo | Passa tra le viste dello stack di chiamate e vista dei metodi. Per altre informazioni, vedere Method View. | |
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. | |
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 | 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. |
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 |
---|---|
Indica la posizione corrente (stack frame attivo) del thread corrente. | |
Indica la posizione corrente (stack frame attivo) di un thread non corrente. | |
Indica il frame dello stack corrente (contesto del debugger corrente). Il nome del metodo è in grassetto ovunque venga visualizzato. |
Icona | Descrizione |
---|---|
Indica la posizione corrente (stack frame attivo) del thread corrente. | |
Indica la posizione corrente (stack frame attivo) di un thread non corrente. | |
Indica il frame corrente dello stack (il contesto corrente del debugger). Il nome del metodo è in grassetto ovunque venga visualizzato. | |
Indica che lo stack frame corrente ha un avviso di stato critico, ad esempio Deadlock. | |
Indica il nodo con deadlock. | |
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. | |
Indica che l'attività corrente è in stato di blocco/attesa e così via. | |
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 .
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 . |
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à |
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.
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.
Nella tabella seguente vengono descritte le funzionalità principali della vista thread.
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
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.
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.
- Attività di debug con la finestra Stack Parallelo
- Debuggamento dei thread con la finestra Stack paralleli