In questa pagina vedremo come sia possibile effettuare il debug dei form sviluppati su piattaforma web e mobile, e degli script inseriti in QualiWare Server Daemon e nei workflow, utilizzando Visual Studio Community Edition, disponibile gratuitamente.
1. Prerequisiti
- Visual Studio Community Edition con, installate, le funzionalità per lo sviluppo di applicazioni web ASP.NET;
- Remote Debugger Tools(*);
- Un utente amministrativo con accesso alla cartella “TEMP” del server dove è installato QualiWare Web Server (generalmente “C:\program files (x86)\qualiware web server\temp”).
(*) i Remote Debugger Tools vanno installati e abilitati solo se Visual Studio non è installato sulla stessa macchina dove è installato QualiWare Web Server.
2. Individuazione della DLL e del file dei simboli corrispondenti ad un form
Prima di tutto è necessario comprendere come QualiWare gestisce il codice Visual Basic contenuto nei form. E’ noto che un form realizzato con il form designer consiste in un file denominato form.xml contenuto nella cartella principale della categoria documentale. Al momento dell’apertura del form da parte dell’utente, attraverso il tasto “Modifica dati” per le categorie di tipo “Documento”, e “Scrivi” per le categorie di tipo “form”, il sistema genera, sempre nella cartella principale della categoria, un file denominato <codice categoria>_form_module.vb, che contiene il codice Visual Basic degli eventi. Tale file viene copiato nella cartella TEMP sul server dove è installato QualiWare Web Server, e compilato(*). L’output della compilazione, consistente in un file DLL e nel file dei simboli con estensione PDB, è contenuto sempre nella cartella TEMP.
I nomi attribuiti ai 3 files VB, DLL e PDB contengono l’indicazione del codice della categoria, come si può vedere nell’esempio qui di seguito, dove il codice della categoria è “ZZZTG”.
(*) la compilazione avviene solo nel caso in cui il file VB venga rigenerato, e ciò avviene alla prima esecuzione del form dopo la modifica dello stesso utilizzando QualiWare Form Designer.
4. Individuazione della DLL e del file dei simboli corrispondenti ad uno script
QualiWare consente di utilizzare script VB.NET in QualiWare Server Daemon e nel BPM Workflow Designer. Tali script vengono compilati al momento dell’esecuzione e il corrispondente sorgente si trova sempre nella cartella TEMP sul server dove è installato QualiWare Web Server, e ha un nome che inizia con “CodeBlock” seguito da un numero casuale di 8 cifre. Il compilatore genererà anche in questo caso un file DLL e un file PDB contenente i simboli.
NOTA: nel caso non sia possibile utilizzare Visual Studio, è possibile utilizzare l’accorgimento descritto qui per facilitare il debug degli script.
5. Connessione al processo in esecuzione
Per effettuare il debug è necessario connettersi al processo in esecuzione lato server. Procedere quindi come segue:
- Mandare in esecuzione il form, aprendolo tramite il pulsante “Modifica dati” o “Scrivi.
- Avviare Visual Studio Community Edition, individuare nella cartella TEMP dell’installazione di QualiWare Web Server (generalmente “\\<nomeserver>\c$\program files (x86)\qualiware web server\temp”) il file VB corrispondente al form o allo script e aprirlo.
- Premere CTRL-ALT-P, specificare nel campo “Qualificatore” il nome del server sul quale è installato QualiWare Web Server, e individuare nella lista “Processi disponibili” il processo relativo, che è denominato w3wp.exe e ha l’indicazione “gestito“. Accertarsi che sia attivata la spunta “Mostra processi di tutti gli utenti”. Una volta selezionato il processo, premere “connetti”.
N.B. nella lista potrebbero essere presenti più processi w3wp.exe con l’indicazione “gestito“. Questo significa che sono in esecuzione più applicazioni web basate su ASP.NET. In questo caso bisogna collegarsi al server, aprire il task manager, selezionare la linguetta “dettagli” o “processi”, aggiungere la colonna “riga di comando” se non c’è, e individuare il processo w3wp.exe nella cui riga di comando sia presente il nome del pool di applicazioni utilizzato dall’istanza di QualiWare Web Server sulla quale si intende effettuare il debug (generalmente il pool si chiama “QualiWare”) - Selezionare la linguetta “Moduli” in basso, inserire nalla casella “Ricerca” il codice della categoria se si vuole fare il debug di un form, o la stringa “CodeBlock” se si vuole fare il debug di uno script, e premere “INVIO” per individuare la DLL corrispondente. Nel caso in cui la linguetta “Moduli” non fosse presente, la si può attivare dal menu: Debug–>Finestre–>Moduli.
Se nella colonna “Stato simboli” non è presente la dicitura “Stato simboli”, è necessario procedere al caricamento degli stessi cliccando col tasto destro del mouse e scegliendo “Carica simboli” e specificando il percorso del file PDB contenuto nella cartella TEMP. Per i debug successivi non sarà più necessario effettuare questa operazione in quanto Visual Studio manterrà memoria del percorso e caricherà automaticamente il PDB corrispondente alla DLL. - A questo punto sarà possibile inserire dei break-point all’interno del codice degli eventi, e procedere con il debug. L’inserimento di un breakpoint può essere effettuato in due modi:
- Dall’IDE di Visual Studio caricando il sorgente nell’editor e cliccando sul bordo sinistro in corrispondenza della riga dove si vuole fermare l’esecuzione
- Inserendo nel codice la seguente istruzione:
System.Diagnostics.Debugger.Break()
N.B. Questa modalità è l’unica utilizzabile con gli script, dal momento che ad ogni esecuzione viene rigenerato il sorgente da compilare, che quindi viene eseguito una volta sola.
NOTE:
- quanto sopra descritto è applicabile anche per effettuare il debug di form mobile e di form collegati a query. L’unica differenza consiste nel nome del file VB residente nella cartella TEMP, che nel caso di form mobile contiene anche la parola “mobile” mentre nel caso di una query contiene il nome della query stessa.
- La modalità di debug degli script sopra descritta è utilizzabile solo dalla release 2015.17.2b in poi in quanto nelle versioni precedenti non veniva generata una DLL su disco ma la compilazione avveniva in memoria.