Connessione a processi in esecuzione con il debugger di Visual Studio

 

Data di pubblicazione: ottobre 2016

Per la documentazione più recente di Visual Studio 2017 RC, vedere Documentazione di Visual Studio 2017 RC.

Collegamento del debugger di Visual Studio a un processo è spesso utile quando un'applicazione non sia stato avviato da Visual Studio, ma si desidera eseguire il debug. Ad esempio, è possibile collegare a un processo IIS o un servizio Windows che ospita un'applicazione .NET. Il processo a che è collegare potrebbe essere locale o remoto. Un altro esempio è che se si esegue l'app senza il debugger rileva un'eccezione, è quindi possibile collegare al processo di esecuzione dell'applicazione per avviare il debug.

Per alcuni tipi di applicazione (ad esempio applicazioni Windows Store), è non collegato direttamente a un nome di processo, ma utilizzare il Debug pacchetto applicazione installato menu opzione (vedere la tabella).

Per identificare se è necessario connettersi a un processo per lo scenario, alcuni degli scenari di debug più comuni sono mostrate di seguito. Dove sono disponibili ulteriori istruzioni, vengono forniti i collegamenti.

ScenarioEseguire il debug (metodo)Nome processoNota e collegamenti
Eseguire il debug di qualsiasi tipo supportato dal computer locale, a partire da Visual StudioDebug con F5 standardN/DVedere Introduzione con il debugger
Eseguire il debug remoto ASP.NET 4 o 4.5 in un server IISUtilizzare gli strumenti remoti e Connetti a processow3wp.exeVedere ASP.NET di debug remoto in un computer remoto IIS
Eseguire il debug remoto ASP.NET di base su un server IISUtilizzare gli strumenti remoti e Connetti a processoDNX.exePer la distribuzione di app, vedere pubblica in IIS. Per il debug, vedere ASP.NET di debug remoto in un computer remoto IIS
Eseguire il debug di altri tipi di app supportati in un processo del serverUtilizzare gli strumenti remoti (se server è remoto) e connettersi al processoIexplore.exe o altri processiSe necessario, utilizzare Task Manager per identificare il processo. Vedere debug remoto e nelle sezioni successive di questo argomento
Debug remoto di un'applicazione desktop WindowsF5 e remote ToolsN/DVedere debug remoto
Un'app Windows universale (UWP), OneCore, HoloLens o IoT di debug remotoEseguire il debug pacchetto applicazione installataN/DUtilizzare Debug / altre destinazioni Debug / Debug pacchetto applicazione installato anziché Connetti a processo
Il debug di un'app Windows universale (UWP), OneCore, HoloLens o IoT non è stato avviato da Visual StudioEseguire il debug pacchetto applicazione installataN/DUtilizzare Debug / altre destinazioni Debug / Debug pacchetto applicazione installato anziché Connetti a processo
System_CAPS_ICON_warning.jpg Avviso

Per connettersi a un'app universale di Windows scritta in JavaScript, per prima cosa è necessario abilitare il debug per l'app. Vedere Attach the debugger in Windows Dev Center.

System_CAPS_ICON_note.jpg Nota

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 utilizzare le funzionalità complete del debugger di Visual Studio (come raggiungere i punti di interruzione), il file eseguibile deve corrispondere esattamente origine locale e simboli (ovvero, il debugger deve essere in grado di caricare il corretto (.pbd) i file di simboli). Per impostazione predefinita, questo richiede una build di debug.

Per scenari di debug remoti, è necessario che il codice sorgente una copia del codice sorgente già aperto in Visual Studio. I file binari compilati app nel computer remoto devono provenire dalla stessa compilazione come sul computer locale.

In alcuni scenari di debug locale, è possibile eseguire il debug in Visual Studio senza accesso all'origine se i file di simboli corretto sono presenti con l'app (per impostazione predefinita, è necessaria una build di debug). Per ulteriori informazioni, vedere specificare simboli e file di origine.

Per le applicazioni desktop di Windows, è anche possibile eseguire il debug di app in esecuzione utilizzando il debugger JIT (Visual Studio apre e si interrompe il codice dell'applicazione dopo che si verifica un errore).

Per connettersi a un processo, è necessario conoscere il nome del processo. Per le applicazioni ASP.NET sono state distribuite a IIS, vedere ASP.NET di debug remoto in un computer remoto IIS o pubblica in IIS per le applicazioni ASP.NET di base. Per le altre applicazioni, è possibile trovare il nome del processo in Gestione attività.

Quando si usa la finestra di dialogo Connetti a processo , è possibile selezionare un altro computer configurato per il debug remoto. Per ulteriori informazioni, vedere debug remoto. Dopo avere selezionato un computer remoto, è possibile visualizzare l'elenco dei processi disponibili in esecuzione in tale computer e connettersi a uno o più di questi processi per eseguire il debug.

Per selezionare un computer remoto:

  1. In Visual Studio selezionare Debug / Connetti a processo.

  2. Nella finestra di dialogo Connetti a processo selezionare il tipo di connessione appropriato nell'elenco Trasporto . Per la maggior parte dei casi è possibile usare l'impostazionePredefinito .

    L'impostazione Trasporto viene mantenuta tra una sessione di debug e l'altra.

  3. Usare la casella di riepilogo Qualificatore per scegliere il nome del computer remoto in uno dei seguenti modi:

    1. Digitare il nome nella casella di riepilogo Qualificatore .

      Nota Se nei passaggi successivi, è possibile connettersi utilizzando il nome del computer remoto, utilizzare l'indirizzo IP. (Il numero di porta potrebbe essere visualizzate automaticamente dopo aver selezionato il processo. È possibile inoltre inserire manualmente. Nella figura riportata di seguito, 4020 è la porta predefinita per il debugger remoto.)

    2. Fare clic sulla freccia a discesa della casella di riepilogo Qualificatore e selezionare il nome del computer dall'elenco a discesa.

    3. Scegliere il pulsante Trova accanto all'elencoQualificatore per aprire la finestra di dialogo Seleziona connessione debugger remoto . Nella finestra di dialogo Seleziona connessione debugger remoto sono elencati tutti i dispositivi presenti nella subnet locale e qualsiasi dispositivo connesso direttamente al computer tramite un cavo Ethernet. Fare clic sul computer o sul dispositivo desiderati e scegliere Seleziona.

    DBG_Basics_Attach_To_Process

    L'impostazione Qualificatore viene invece mantenuta tra due sessioni di debug solo il qualificatore consente di stabilire correttamente una connessione di debug.

  4. Fare clic su Aggiorna.

    L'elenco Processi disponibili viene visualizzato automaticamente quando si apre la finestra di dialogo Processi . I processi possono essere avviati e interrotti in background mentre la finestra di dialogo è aperta. È quindi possibile che il contenuto non sia sempre aggiornato. Per visualizzare i processi correnti, è possibile aggiornare l'elenco in qualsiasi momento usando il pulsante Aggiorna.

  5. Nella finestra di dialogo Connetti a processo individuare il programma con il quale si desidera stabilire una connessione nell'elenco Processi disponibili .

    Se il processo viene eseguito con un account utente diverso, selezionare la casella di controllo Mostra processi di tutti gli utenti .

  6. Scegliere Connetti.

Per connettersi a un processo, è necessario conoscere il nome del processo. È possibile trovare il nome del processo in Gestione attività.

  1. In Visual Studio selezionare Debug / Connetti a processo.

  2. Nella finestra di dialogo Connetti a processo individuare il programma con il quale si desidera stabilire una connessione nell'elenco Processi disponibili .

    Se il processo viene eseguito con un account utente diverso, selezionare la casella di controllo Mostra processi di tutti gli utenti .

  3. Nella casella Connetti a verificare che sia presente il tipo di codice di cui eseguire il debug. L'impostazione predefinita Automatico tenta di determinare il tipo di codice di cui si desidera eseguire il debug. Per impostare manualmente il tipo di codice, eseguire le operazioni seguenti

    1. Nella finestra di dialogo Connetti a scegliere Seleziona.

    2. Nella finestra di dialogo Seleziona tipo di codice fare clic su Esegui il debug di questi tipi di codice e selezionare i tipi da sottoporre a debug.

    3. Fare clic su OK.

  4. Scegliere Connetti.

Durante l'esecuzione del debug è possibile essere connessi a più di un programma, ma in un dato momento solo uno di tali programmi potrà essere attivo nel debugger. È possibile impostare il programma attivo nella barra degli strumenti Posizione di debug o nella finestra Processi . Per altre informazioni, vedere Procedura: Impostare il processo corrente.

Se si tenta di connettersi a un processo appartenente a un account utente non attendibile, verrà visualizzata una finestra di dialogo contenente un avviso di sicurezza per chiedere conferma dell'operazione. Per ulteriori informazioni vedere avviso di sicurezza: la connessione a un processo appartenente a un utente non attendibile può essere pericolosa. Se le informazioni seguenti sospette o non si è certi, non collegare questo processo.

In alcuni casi, quando viene eseguito il debug in una sessione di Desktop remoto (Servizi terminal), nell'elenco Processi disponibili non vengono visualizzati tutti i processi disponibili. Se si esegue Visual Studio con un account utente limitato, nell'elenco Processi disponibili non verranno visualizzati i processi in esecuzione nella Sessione 0 utilizzata per i servizi e gli altri processi del server, incluso w3wp.exe. È possibile risolvere il problema eseguendo Visual Studio con un account amministratore o Visual Studio dalla console del 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 processo usando tlist.exe. Per ottenere tlist.exe, scaricare e installare gli strumenti di debug per Windows disponibili in Download di WDK e WinDbg.

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. Questa situazione può verificarsi quando si tenta di stabilire una connessione 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. Può inoltre verificarsi quando si tenta di stabilire una connessione a due o più processi per il debug diretto di un database. Durante il debug SQL è supportata esclusivamente la connessione a un singolo processo.

Se il debugger è in grado di connettersi solo ad alcuni tipi di codice, verrà visualizzato un messaggio che identifica i tipi per i quali la connessione ha avuto esito negativo.

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 messaggio di esempio sopra riportato segnala che non è stato possibile stabilire una connessione al tipo di codice di script. Non sarà quindi possibile eseguire il debug del codice di script nel processo. Il codice di script del processo verrà comunque eseguito, ma non sarà possibile impostare punti di interruzione, visualizzare dati o eseguire altre operazioni di debug nello script.

Se si desidera ottenere informazioni più specifiche sulla causa che ha impedito al debugger di connettersi a un tipo di codice, è possibile provare a ripetere la connessione solo a quel tipo di codice.

Per ottenere informazioni specifiche sulla causa dell'errore collegare un tipo di codice

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

  2. Riconnettersi al processo, selezionando un solo tipo di codice.

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

    2. Fare clic su 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 tutti gli altri codici.

    4. Fare clic su OK. La finestra di dialogo Seleziona tipo di codice verrà chiusa.

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

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

Debug di più processi
Il debug Just-In-Time
Debug remoto

Mostra: