Visual Studio Remote Debugging

Cari lettori, oggi discuteremo un importante strumento di debug che non tutti conoscono: Visual studio Remote Debugging. Si tratta di una feature che vi consentirà di debuggare remotamente le vostre applicazioni, collocate dai vostri clienti, rimanendo comodamente seduti nella poltrona della vostra scrivania.

In passato mi è capitato di gestire richieste di Supporto Tecnico nelle quali il cliente aveva delle difficoltà ad utilizzare questo strumento, per cui ho deciso di scrive un articolo a tal proposito.

Quali sono gli strumenti di cui abbiamo bisogno?

  • Visual Studio 2005 oppure una versione successiva.
  • Msvsmon.exe. Si tratta di un piccolissimo software che consente il dialogo tra la macchina di sviluppo e la macchina che ospita l’applicazione da debuggare. Procurarsi tale software è molto semplice, l’installazione di Visual Studio fornisce tale tool nelle seguenti directory:
    • Install path\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86
    • Install path\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x64
    • Install path\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\ia64

Per chiarezza espositiva, supponiamo che l’utente Luca che lavora sulla macchina developMachine(denoteremo questo legame come Luca@developMachine), voglia debuggare tramite Visual Studio, l’applicazione sviluppata in precedenza che attualmente si trova in esecuzione sulla macchina remota Windows7, nella quale è attualmente loggato l’utente Mario(denoteremo questo legame come Mario@Windows7).

Notate che non ho fatto nessun riferimento ai domini riguardanti i due utenti, dato che Visual Studio Remote Debugging è in grado di funzionare correttamente anche se i due utenti sono collocati su domini diversi.

Come ottenere il nostro obbiettivo?

La prima cosa da fare consiste nel copiare il file Msvsmon.exe nella macchina Windows7, all’interno della sessione dell’utente Mario. Useremo la versione di Msvsmon.exe più consona alla configurazione della macchina Windows7: x86, x64 o ia64.

Compiuta tale operazione è necessario configurare il firewall, in entrambe le macchine, al fine di sbloccare opportunamente le porte che verranno utilizzate durante la comunicazione tra: Visual Studio e Msvsmon.exe. Vi riamando a questo link che indica il set di porte utilizzate.

A questo punto Mario@windows7 creerà nella propria macchina un utente locale, il quale deve avere lo stesso nome utente e password dell’utente che vuole debuggare remotamente, in questo caso Luca. Mario definisce dunque l’utente Luca@windows7.

Compiuta tale attività, Mario avvierà sulla propria macchina Msvsmon.exe,che mostrerà la seguente finestra:

image

Avviato Msvsmon.exe è importante fornire i permessi per il debug all’utente Luca. A tal fine Mario cliccherà sul menu “Tools” > Option ed il sistema mostrerà la seguente schermata:

image

Mario cliccherà su permissions e darà pieno accesso all’utente Luca@Windows7 . Fatto ciò l’utente Mario potrà finalmente rilassarsi il suo lavoro è compiuto (attenzione ad ogni riavvio di Msvsmon occorrerà reimpostare le permissions).

Torniamo all’utente Luca@developMachine, questo dovrà avviare Visual Studio, tools > Attach to Process ed interagire con la sottostante form:

image

Le informazioni da completare sono:

Transport: Default.

Qualifier: mario@Windows7

Fatto ciò occorrerà cliccare il tasto refresh per la connessione alla macchina remota, ma… che cosa accade? Se tutto è andato bene il sistema dovrebbe mostrare il seguente messaggio d’errore:

 image

Il messaggio indica che Visual Studio può comunicare con la macchina remota ma che quest’ultima non è in grado di comunicare le informazioni alla macchina luca@developMachine.

Per fissare tale problema occorre che Luca crei nella propria macchina un utente locale che abbia la stessa password dell’utente Mario@Windows7. Luca creerà a tal fine l’utente Mario@developMachine.

Compiuta tale operazione Luca sarà in grado di debuggare remotamente l’applicazione che attualmente si trova in esecuzione su Mario@Windows7.

Come avete avuto modo di osservare è opportuno che i due utenti mappino correttamente le permissions e dispongano di due utente locali che condividano user name e password.

Un modo per semplificare l’utilizzo del tool di cui sopra è il seguente:

Supponiamo nuovamente che Luca@developMachine voglia debuggare l’applicazione remota, che attualmente si trova in esecuzione nella macchina: Mario@Windows7.

Per evitare di mappare i due utenti sulle due macchine si può procedere così:

  • Mario crea sulla propria macchina l’utente Luca@Windows7 avente la stessa password di Luca@developMachine
  • Mario effettua il log-on sulla macchina Wndows 7 utilizzando le credenziali di Luca.
  • Mario avvierà l’applicazione da debuggare e Msvsmon.exe nella sessione dell’utente Luca.
  • Luca dalla macchina Luca@develoMachine si connette con i passi discussi sopra alla sessione remota dell’utente Luca@Window7 specificando come Qualifier: Luca@Windows7 

Quindi… debuggate comodamente dal vostro ufficio Open-mouthed.