Questo è un post fantasma, io scrivo per ritrovare le note quando servirà, ma sono solo un amanuense, il vero esperimento è stato fatto da Luca, il mio collega che ama moltissimo scrivere codice, ma odia scrivere documentazione, blog, articoli e parlare alle pubbliche conferenze… ho sempre la speranza di convincerlo almeno a scrivere un blog, ma le possibilità sono scarse.
Ad ogni modo ecco il come si fa:
Avevamo un comportamento anomalo su una macchina per una applicazione appena installata, la macchina era su un dominio diverso da quello dei PC di sviluppo e volendo fare un remote debug, ecco quello che abbiamo fatto:
Sulla macchina remota, quando si apre l’applicazione mswsmon, ovvero il remote debugger, sul menu Tools>options si può scegliere fra:
- Nessuna autenticazione
- Autenticazione windows
Provando con la prima, si può debuggare, ma non siamo stati in grado di caricare i debug symbols, pertanto cercare il problema non era proprio semplice senza il codice, anche copiando in locale i files .pdb sulla cartella di installazione non si vedevano i simboli.
Per poter usare quindi l’opzione 2 abbiamo dovuto fare una serie di cose che elenco di seguito:
- Creare un utente locale con stesso nome e stessa password su entrambe le macchine, dandogli privilegi di amministratore (in verità sulla macchina remota crediamo bastino privilegi di Remote Debug.)
- Disattivare i firewall di entrambe le macchine (siamo certi che basta attivare qualche porta, ma essendo nella stessa rete e nello stesso ufficio, questo era più facile.)
- Usando mswsmon sulla macchina remota, loggati con l’utente che poi doveva far girare l’applicazione, abbiamo creato un server chiamato: NomeUtente@Nomemecchina, dove NomeUtente era il nome dell’utente locale creato precedentemente.
- Loggarsi sulla macchina di sviluppo con l’utente locale e relativa password, aprire Visual Studio 2010, aprire il debug remoto usando Debug>Attach to process e scegliere:
- Transport = default(Windows Authentication)
- Qualifier = NomeUtente@Nomemacchina(quelli del punto 3)
- Cercare il processo, fare doppio click e confermare.
- A questo punto siamo attaccati al processo sulla macchina remota e possiamo debuggarlo.
- Abbiamo verificato anche che se abbiamo la medesima versione del programma su entrambe le macchine, se non ci sono i .pdb sulla macchina remota, è possibile usare la finestra Debug>Windows>Modules per cercare la dll o l’exe a cui siamo attaccati e usando il menu contestuale, con il tasto destro, si può caricare i simboli da un file sulla macchina di sviluppo.