Associare a processi in esecuzione con il debugger di Visual Studio

È possibile collegare il debugger di Visual Studio a un processo in esecuzione in un computer locale o remoto. Dopo l'esecuzione del processo, selezionare Debug>Connetti a processo o premere CTRL+ALT+P in Visual Studio e usare la finestra di dialogo Connetti a processo per collegare il debugger al processo.

È possibile usare Connetti a processo per eseguire il debug di app in esecuzione in computer locali o remoti, eseguire il debug di più processi contemporaneamente, eseguire il debug di app non create in Visual Studio o eseguire il debug di qualsiasi app non avviata da Visual Studio con il debugger collegato. Ad esempio, se si esegue un'app senza il debugger e si verifica un'eccezione, è possibile collegare il debugger al processo che esegue l'app e avviare il debug.

Suggerimento

Non si è certi di usare Connetti a processo per lo scenario di debug? Vedere Scenari di debug comuni.

Connettersi a un processo in esecuzione nel computer locale

Per ricollegare rapidamente un processo collegato in precedenza, vedere Ricollegamento a un processo.

Per collegarsi a un processo nel computer locale:

  1. In Visual Studio selezionare Debug>Collega a processo (o premere CTRL+ALT+P) per aprire la finestra di dialogo Connetti a processo.

  2. Controllare il tipo di Connessione ion.

    Nella maggior parte degli scenari è possibile usare Default. Alcuni scenari potrebbero richiedere un tipo di connessione diverso. Per altre info, vedi altre sezioni di questo articolo o Scenari di debug comuni.

  3. Impostare la destinazione Connessione ion sul nome del computer locale.

    Screenshot della finestra di dialogo Connetti a processo con la destinazione di connessione impostata sul nome del computer locale.

    Screenshot della finestra di dialogo Connetti a processo con la destinazione di connessione impostata sul nome del computer locale.

  4. Nell'elenco Processi disponibili trovare e selezionare il processo o i processi a cui si vuole collegarsi.

    • Per selezionare rapidamente un processo, digitare il nome o la prima lettera nella casella Processi di filtro.

    • Se non si conosce il nome del processo, esplorare l'elenco o vedere Scenari di debug comuni per alcuni nomi di processo comuni.

    Suggerimento

    I processi possono essere avviati e interrotti in background mentre è aperta la finestra di dialogo Connetti a processo , pertanto l'elenco dei processi in esecuzione potrebbe non essere sempre aggiornato. È possibile selezionare Aggiorna in qualsiasi momento per visualizzare l'elenco corrente.

  5. Nel campo Connetti a verificare che sia elencato il tipo di codice di cui si intende eseguire il debug. L'impostazione automatica predefinita funziona per la maggior parte dei tipi di app.

    Se si usa il tipo di connessione predefinito , è possibile selezionare manualmente il tipo di codice a cui si vuole connettersi. In caso contrario, l'opzione Seleziona potrebbe essere disabilitata.

    Per selezionare manualmente i tipi di codice:

    1. Fare clic su Seleziona.
    2. Nella finestra di dialogo Seleziona tipo di codice selezionare Debug di questi tipi di codice. Se si verifica un errore quando si tenta di connettersi a un processo nell'elenco, è possibile usare la finestra di dialogo Seleziona tipo di codice per risolvere il problema.
    3. Selezionare i tipi di codice di cui eseguire il debug.
    4. Seleziona OK.
  6. Seleziona Allega.

Suggerimento

Nello scenario in cui sono presenti più processi identici, usare la colonna Riga di comando o i dettagli del processo w3wp dalla colonna Titolo per identificare il processo corretto.

Nota

È possibile essere collegati a più app per il debug, ma solo un'app è attiva nel debugger alla volta. È possibile impostare l'app attiva nella barra degli strumenti Percorso di debug di Visual Studio o nella finestra Processi.

Connettersi a un processo in un computer remoto

È anche possibile selezionare un computer remoto nella finestra di dialogo Connetti a processo , visualizzare un elenco dei processi disponibili in esecuzione nel computer e collegarsi a uno o più processi per il debug. Il debugger remoto (msvsmon.exe) deve essere in esecuzione nel computer remoto. Per altre informazioni, vedere Debug remoto.

Per istruzioni più complete per il debug di applicazioni ASP.NET distribuite in IIS, vedere Remote debugging ASP.NET in un computer IIS remoto.

Per connettersi a un processo in esecuzione in un computer remoto:

  1. In Visual Studio selezionare Debug>Collega a processo (o premere CTRL+ALT+P) per aprire la finestra di dialogo Connetti a processo.

  2. Controllare il tipo di Connessione ion.

    Nella maggior parte degli scenari è possibile usare Default. Alcuni scenari, ad esempio il debug di Linux o un'app in contenitori, richiedono un tipo di connessione diverso. Per altre info, vedi altre sezioni di questo articolo o Scenari di debug comuni.

  3. Nella casella di destinazione Connessione selezionare il computer remoto usando uno dei metodi seguenti:

    • Selezionare la freccia dell'elenco a discesa accanto a Connessione destinazione e selezionare il nome del computer dall'elenco a discesa.

    • Digitare il nome del computer nella casella di destinazione Connessione ion e premere INVIO.

      Verificare che Visual Studio aggiunga la porta richiesta al nome del computer, visualizzato nel formato: <nome> computer remoto:p ort

      Nota

      Se non è possibile connettersi usando il nome del computer remoto, provare a usare l'indirizzo IP e la porta , ad esempio 123.45.678.9:4022. 4026 è la porta predefinita per il debugger remoto di Visual Studio 2022. Per altre assegnazioni di porte del debugger remoto, vedere Assegnazioni di porte del debugger remoto.

      Nota

      Se non è possibile connettersi usando il nome del computer remoto, provare a usare l'indirizzo IP e la porta , ad esempio 123.45.678.9:4022. 4024 è la porta predefinita per il debugger remoto di Visual Studio 2019. Per altre assegnazioni di porte del debugger remoto, vedere Assegnazioni di porte del debugger remoto.

    • Selezionare il pulsante Trova accanto alla casella di destinazione Connessione ion per aprire la finestra di dialogo Connessione oni remote. Nella finestra di dialogo Remote Connessione ions sono elencati tutti i dispositivi presenti nella subnet locale o collegati direttamente al computer. Potrebbe essere necessario aprire la porta UDP 3702 nel server per individuare i dispositivi remoti. Selezionare il computer o il dispositivo desiderato e quindi fare clic su Seleziona.

    Nota

    L'impostazione del tipo di Connessione viene mantenuta tra le sessioni di debug. L'impostazione di destinazione Connessione ion viene mantenuta tra le sessioni di debug solo se si è verificata una connessione di debug corretta con tale destinazione.

  4. Fare clic su Aggiorna per popolare l'elenco Processi disponibili.

    Suggerimento

    I processi possono essere avviati e interrotti in background mentre è aperta la finestra di dialogo Connetti a processo , pertanto l'elenco dei processi in esecuzione potrebbe non essere sempre aggiornato. È possibile selezionare Aggiorna in qualsiasi momento per visualizzare l'elenco corrente.

  5. Nell'elenco Processi disponibili trovare e selezionare il processo o i processi a cui si vuole collegarsi.

  6. Nel campo Connetti a verificare che sia elencato il tipo di codice di cui si intende eseguire il debug. L'impostazione automatica predefinita funziona per la maggior parte dei tipi di app.

    Se si usa il tipo di connessione predefinito , è possibile selezionare manualmente il tipo di codice a cui si vuole connettersi. In caso contrario, l'opzione Seleziona potrebbe essere disabilitata.

    Per selezionare manualmente i tipi di codice:

    1. Fare clic su Seleziona.
    2. Nella finestra di dialogo Seleziona tipo di codice selezionare Debug di questi tipi di codice. Se si verifica un errore quando si tenta di connettersi a un processo nell'elenco, è possibile usare la finestra di dialogo Seleziona tipo di codice per risolvere il problema.
    3. Seleziona OK.
  7. Seleziona Allega.

Nota

È possibile essere collegati a più app per il debug, ma solo un'app è attiva nel debugger alla volta. È possibile impostare l'app attiva nella barra degli strumenti Percorso di debug di Visual Studio o nella finestra Processi.

In alcuni casi, quando si esegue il debug in una sessione di Desktop remoto (Servizi terminal), l'elenco Processi disponibili non visualizzerà tutti i processi disponibili. Se si esegue Visual Studio come utente con un account utente limitato, l'elenco Processi disponibili non mostrerà i processi in esecuzione nella sessione 0. La sessione 0 viene usata per i servizi e altri processi server, tra cui w3wp.exe. È possibile risolvere il problema eseguendo Visual Studio con un account amministratore o eseguendo Visual Studio dalla console server invece di una sessione di Servizi terminal.

Se non è possibile adottare una di queste soluzioni alternative, una terza opzione consiste nel connettersi al processo eseguendo vsjitdebugger.exe -p <ProcessId> dalla riga di comando di Windows. È possibile determinare l'ID del processo usando tlist.exe. Per ottenere tlist.exe, scaricare e installare gli strumenti di debug per Windows disponibili in Download di WDK e WinDbg.

Connettersi a un processo .NET Core in esecuzione nel servizio app Azure (Windows)

Se si esegue la pubblicazione nel servizio app Azure (Windows), vedere Debug remoto ASP.NET Core in Azure o Debug del servizio app Azure per istruzioni.

Connettersi a un processo .NET Core in esecuzione nel servizio app Azure (Windows)

Se si esegue la pubblicazione in app Azure Servizio (Windows), si troverà l'opzione Collega debugger nel menu ... in Hosting nel profilo di pubblicazione. Visual Studio tenta di collegare il debugger remoto all'istanza del servizio app Azure (Windows) in cui il profilo sta pubblicando.

Screenshot dell'opzione Collega debugger dall'interno della pagina Di riepilogo della pubblicazione.

Connettersi a un processo .NET Core in esecuzione in Linux tramite SSH

Per altre informazioni, vedere Debug remoto di .NET Core in esecuzione in Linux tramite SSH.

Connettersi a un processo in esecuzione in un contenitore Docker

A partire da Visual Studio 2019, è possibile collegare il debugger di Visual Studio a un processo in esecuzione in un contenitore Docker. Per un contenitore Docker di Linux .NET Core, vedere Connettersi a un processo in esecuzione in un contenitore Docker Linux. Per un contenitore Docker di Windows, vedere Connettersi a un processo in esecuzione in un contenitore Docker di Windows.

Ricollegamento a un processo

È possibile ricollegare rapidamente i processi a cui è stato precedentemente collegato scegliendo Debug>Ricollegamento a processo (MAIUSC+ALT+P). Quando si sceglie questo comando, il debugger tenterà immediatamente di connettersi agli ultimi processi a cui si è connessi tentando prima di tutto di trovare la corrispondenza con l'ID del processo precedente e, in caso di esito negativo, eseguendo la corrispondenza con il nome del processo precedente. Se non vengono trovate corrispondenze o se più processi hanno lo stesso nome, verrà aperta la finestra di dialogo Connetti a processo in modo da poter selezionare il processo corretto.

Nota

Il comando Reattach to Process è disponibile a partire da Visual Studio 2017.

Scenari di debug comuni

Per determinare se usare Attach to Process e il processo a cui connettersi, la tabella seguente illustra alcuni scenari di debug comuni, con collegamenti ad altre istruzioni, se disponibili. L'elenco non è esaustivo.

Per alcuni tipi di app, ad esempio piattaforma UWP (Universal Windows Platform) (UWP), non si collega direttamente a un nome di processo, ma usare l'opzione di menu Debug pacchetto app installato in Visual Studio (vedi tabella).

Affinché il debugger possa connettersi a codice scritto in C++, è necessario che venga generato l'elemento DebuggableAttribute. È possibile aggiungere automaticamente questo elemento al codice mediante il collegamento all'opzione del linker /ASSEMBLYDEBUG .

Per il debug di script sul lato client, il debug degli script deve essere abilitato nel browser. Per il debug dello script sul lato client in Chrome, scegliere JavaScript o TypeScript come tipo di codice e, a seconda del tipo di app, potrebbe essere necessario chiudere tutte le istanze di Chrome e avviare il browser in modalità di debug (digitare chrome.exe --remote-debugging-port=9222 da una riga di comando).

Per il debug di script sul lato client, il debug degli script deve essere abilitato nel browser. Per il debug dello script sul lato client in Chrome, scegliere JavaScript (Chrome) o JavaScript (Microsoft Edge - Chromium) come tipo di codice e, a seconda del tipo di app, potrebbe essere necessario chiudere tutte le istanze di Chrome e avviare il browser in modalità di debug (digitare chrome.exe --remote-debugging-port=9222 da una riga di comando). Nelle versioni precedenti di Visual Studio, il debugger di script per Chrome era Web kit.

Per selezionare rapidamente un processo in esecuzione a cui collegarsi, in Visual Studio digitare CTRL+ALT+P e quindi digitare la prima lettera del nome del processo.

Scenario Metodo di debug Nome processo Note e collegamenti
ASP.NET Core - Debug remoto nel server IIS Usare gli strumenti remoti e Collega a processo w3wp.exe o dotnet.exe A partire da .NET Core 3, il processo di w3wp.exe viene usato per il modello di hosting in-app predefinito. Per la distribuzione di app, vedere Pubblicare in IIS. Per informazioni più dettagliate, vedere Debug remoto ASP.NET Core in un computer IIS remoto
ASP.NET Core - Eseguire il debug nel computer locale dopo l'avvio dell'app senza il debugger Usare Attach to Process msedge.exe Questo potrebbe essere utile per velocizzare il caricamento dell'app, ad esempio (ad esempio) durante la profilatura.
ASP.NET 4 o 4.5 - Debug remoto in un server IIS Usare gli strumenti remoti e Collega a processo w3wp.exe Vedere Debug remoto ASP.NET in un computer IIS remoto
Script sul lato client: eseguire il debug in un server IIS locale per i tipi di app supportati Usare Attach to Process chrome.exe o msedge.exe È necessario abilitare il debug degli script. Per Chrome, è necessario eseguire Chrome anche in modalità di debug (digitare chrome.exe --remote-debugging-port=9222 da una riga di comando) e selezionare JavaScript o TypeScript nel campo Connetti a .
App C#, Visual Basic o C++ - Debug nel computer locale Usare il debug standard (F5) o Attach to Process <appname>.exe Nella maggior parte degli scenari, usare il debug standard e non Collega a processo.
App desktop di Windows - Debug remoto Remote Tools N/D Vedere Eseguire il debug remoto di un'app C# o Visual Basic o Eseguire il debug remoto di un'app C++
.NET Core in Linux - Debug Usare Attach to Process dotnet.exe o un nome di processo univoco Per usare SSH, vedere Eseguire il debug remoto di .NET Core in esecuzione in Linux tramite SSH. Per le app in contenitori, vedere Connettersi a un processo in esecuzione in un contenitore Docker.
App in contenitori - Debug Usare Attach to Process dotnet.exe o un nome di processo univoco Vedere Connettersi a un processo in esecuzione in un contenitore Docker
Python in Linux - Debug remoto Usare Attach to Process debugpy Vedere Connettersi in remoto da Python Tools
Altri tipi di app supportati - Eseguire il debug in un processo del server Se il server è remoto, usare gli strumenti remoti e Collega a processo chrome.exe, msedge.exe o altri processi Se necessario, usare Monitoraggio risorse per identificare il processo. Vedere Debug remoto.
App UWP (Universal Windows App), OneCore, HoloLens o app IoT - Debug remoto Debug pacchetto dell'app installato N/D Vedere Eseguire il debug di un pacchetto di app installato anziché usare Connetti a processo
App UWP (Universal Windows App), OneCore, HoloLens o IoT: eseguire il debug di un'app che non è stata avviata da Visual Studio Debug pacchetto dell'app installato N/D Vedere Eseguire il debug di un pacchetto di app installato anziché usare Connetti a processo

Usare le funzionalità del debugger

Per usare le funzionalità complete del debugger di Visual Studio ,ad esempio il raggiungimento dei punti di interruzione, quando si collega a un processo, l'app deve corrispondere esattamente all'origine locale e ai simboli. Ovvero, il debugger deve essere in grado di caricare i file di simboli corretti (con estensione pdb). Per impostazione predefinita, è necessaria una compilazione di debug.

Per gli scenari di debug remoto, è necessario che il codice sorgente (o una copia del codice sorgente) sia già aperto in Visual Studio. I file binari dell'app compilati nel computer remoto devono provenire dalla stessa build del computer locale.

In alcuni scenari di debug locali, è possibile eseguire il debug in Visual Studio senza accesso all'origine se i file di simboli corretti sono presenti con l'app. Per impostazione predefinita, è necessaria una compilazione di debug. Per altre informazioni, vedere Specificare i file di simboli e di origine.

Risolvere gli errori di connessione

In alcuni scenari, il debugger potrebbe richiedere assistenza per identificare correttamente il tipo di codice di cui eseguire il debug. Se i valori di connessione sono impostati correttamente (è possibile visualizzare il processo corretto nell'elenco Processi disponibili), ma il debugger non è collegato, provare a selezionare il tipo di connessione più appropriato nell'elenco dei tipi di Connessione ion, che potrebbe essere necessario, ad esempio, se si esegue il debug di un'app Linux o Python. Se si usa il tipo di connessione predefinito, in alternativa è possibile selezionare il tipo di codice specifico a cui connettersi, come descritto più avanti in questa sezione.

I processi in esecuzione a cui il debugger tenta di connettersi possono contenere uno o più tipi di codice. I tipi di codice a cui il debugger può connettersi vengono visualizzati e selezionati nella finestra di dialogo Seleziona tipo di codice .

In alcuni casi il debugger riesce a connettersi a un tipo di codice ma non a un altro. In genere, questo si verifica quando:

  • Si tenta di connettersi a un processo in esecuzione in un computer remoto. nel quale potrebbero essere stati installati i componenti per il debug remoto solo per alcuni tipi di codice.
  • Si tenta di connettersi a due o più processi per il debug diretto del database. Durante il debug SQL è supportata esclusivamente la connessione a un singolo processo.

Se il debugger è in grado di connettersi ad alcuni tipi di codice, ma non a tutti, viene visualizzato un messaggio che identifica i tipi che non sono stati collegati.

Se il debugger riesce a connettersi ad almeno un tipo di codice, è possibile procedere con il debug del processo. Sarà possibile eseguire il debug solo dei tipi di codice con i quali è stata stabilita una connessione. Il codice scollegato nel processo verrà comunque eseguito, ma non sarà possibile impostare punti di interruzione, visualizzare i dati o eseguire altre operazioni di debug su tale codice.

Se si vogliono informazioni più specifiche sul motivo per cui il debugger non è riuscito a connettersi a un tipo di codice, provare a ricollegarsi solo a tale tipo di codice.

Per ottenere informazioni specifiche sulla causa dell'errore di connessione a un tipo di codice:

  1. Disconnettersi dal processo. Scegliere Scollega tutto dal menu Debug.

  2. Ricollegarsi al processo, selezionando solo il tipo di codice che non è riuscito a collegarsi.

    1. Nella finestra di dialogo Connetti a processo selezionare il processo nell'elenco Processi disponibili.

    2. Seleziona Seleziona.

    3. Nella finestra di dialogo Seleziona tipo di codice selezionare il pulsante di opzione Esegui il debug di questi tipi di codice e il tipo di codice per cui si è verificato il problema di connessione. Deselezionare gli altri tipi di codice.

    4. Seleziona OK.

    5. Nella finestra di dialogo Connetti a processo selezionare Connetti.

    La connessione non verrà eseguita e verrà visualizzato un messaggio di errore specifico.