rosalba

Il blog di Rosalba Fiore [Microsoft Certified Trainer]
posts - 398, comments - 583, trackbacks - 4693

My Links

News

Article Categories

Archives

Post Categories

Image Galleries

Al primo posto

Alcune delle Donne Attive

Alcuni dei ferri del mestiere di una MCT

Certificazioni Informatiche

elearning...funziona solo in alcuni casi!!!

Eventi

Gli MCT nel mondo

La mia zone

Link tecnici

Link un pò così

Panoramica altre Community

Post-it Articoli e post di MCT, MVP ect

Windows Vista

Errori che fan rima con orrori!!!

Ripassando, ripassando...... l'esame è sempre più vicinooooooo,cosa ho studiato oggi ?  : Debugging Windows varie, Debug e Trace,Log, Trace Switches

La perfezione non è di questa Terra....

(neanche i miei post se trovate degli orrori AVVISATEMI!!!)

Gli errori che possiamo commettere sono essenzialmente: syntax error (visualizzati nella Task List), Run-time e logici. Per porre rimedio alla mancaza di logica nel nostro programma effettuiamo l'analisi line-by-line con l'ausilio di StepInto,StepOver,StepOut,Run To Cursor e Set Next Statement.

Facendo qualche simulazione dell'esame mi sono capitate diverse domande sulle Debugging Windows, facciamo un piccolo richiamo:

  • Task List - i syntax error ed i TODO (commenti che indicano le cose che dobbiamo ancora fare)
  • Output Windows - dove vengono notificati tutti i messaggi quali load d'assembly, output da Debug e Trace
  • Windows per il controllo e l'edit di variabili:
    • Local - qui monitoriamo il valore di tutte le variabili della procedura o possiamo editarne il valore
    • Auto - per le variabili nella linea corrente e nella linea precedente
    • Watch - monitora le variabili che aggiungo ad essa
    • QuickWatch - posizionadosi su di una variabile nel codice e facendo click di destro possiamo attivare la QuickWatch per verificare la variabile in questione
  • Command Windows -per eseguire la procedura, valutare espressioni, cambiare valore alle variabili durante il debugging
  • Running Documents - visualizza la dista dei documenti al momento caricanti nel processo che stiamo eseguendo 
  • This - visualizza i membri degli oggetti associati con il metodo corrente
  • Call Stack - visualizza il nome delle funzioni nella call stack,tipi parametro e valori parametro
  • Threads - per esaminari controlli di threades
  • Modules - la lista dei moduli (DLL o EXE) usati dal programma
  • Memory - stringhe e per visualizzare quei dati che nelle Local,Auto o Watch non vengono visualizzati correttamente
  • Disassembly - visualizza il codice dell'assembly corrispondente alle istruzioni create dal compilatore
  • Registers - visualizza il contenuto del register

Se vogliamo ottenere un messaggio informativo senza interrompere l'esecuzione del nostro programma utilizziamo le classi Debug (si usa in fase di sviluppo dell'applicazione )e Trace (si usa per testare ed ottimizzare l'applicazione dopo la compilazione e il released) essa è utilizzata anche per l'ottimizzazione dell'applicazione.

Debug e Trace

Le classi Debug e Trace sono definite nel namespace System.Diagnostics, i loro metodi sono per lo più static , tranne la differenza di uso specificata sopra,  la Trace è inserita di default quando "buildiamo".Il risultato di questi metodi è visualizzato nella Output windows ed inviato alla Listeners collection, contenente diverse classi per ricevere l'output dalle due classi Debug e Trace. Metodi e proprietà delle due classi sono identici quindi gli esempi che seguono valgono per entrambe basta sostituire alla parola Debug la parola Trace e viceversa. 

Alcuni dei metodi per scrivere l'output per i Listeners sono:Write, WriteLine, WriteIf, WriteLineIf, Assert e Fail

Vediamo come si utilizzano WriteLineIf,Assert e Fail:

  • Debug.WriteLineIf(se è vero questo,scrivi questo output e ritorna a capo) ossia  Debug.WriteLineIf(Z==T,"Z è uguale a T");
  • Debug.Assert(se questo è falso,scrivi l'output e visualizza questo messaggio) ossia Debug.Assert(Z==T,"Z è diverso da T");
  • Debug.Fail(scrivi l'output incondizionatamente e visualizza questo messaggio) ossia Debug.Fail("Z è diverso da T");

LOG

Vediamo brevemente come ottenere dei log, possiamo ottenere un text file (utilizziamo la classe TextWriteTraceListeners) oppure un EventLog (utilizziamo la classe EventLogTraceListeners). Per creare un file di testo:

Vediamo praticamente come fare:

  1. Creaimo il nostro progetto File\New\Project e scegliamo come Templates la Windows Application nominandola  ErroriTB
  2. Visualizziamo il codice della nostra Form1 (doppio click)
  3. Aggiugiamo la direttiva usign System.Diagnostic 
  4. All'interno dell'event handler Form.Load dichiariamo TextWriterTraceListener  e aggiungiamola alla Listeners collection 
  5. dichiariamo il BooleanSwitch inserendolo dopo la { della public class Form1 e prima di public Form1()
  6. Usiamo anche il catch, finally etc (non indicati)
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
//aggiungiamo la direttiva using per gestire il Trace
using System.Diagnostic;
//
namespace ErroriTB
{
    
/// <summary>
    /// 
Summary description for Form1.
    
/// </summary>
    
public class Form1 : System.Windows.Forms.Form
    {
        
//definiamo il BooleanSwitch che serve per controllare che tipo d'output
        
public BooleanSwitch mioBooleanSwitch = new BooleanSwitch("mioBooleanSwitch", "Questo switch tracing l'applicazione");
//
//(codice omesso)
//
#endregion

private void 
Form1_Load(object sender, System.EventArgs e)
    {
    
/*Apriamo o creiamo un file di testo 
    nb. usiamo ....FileMode.OpendOrCreate se il nostro scopo è di creare o di sovrascrive il file di testo miofile.txt
    se invece vogliaoo continuare ad aggiungere del testo al file esistente usiamo ....FileMode.Append*/
    
   
System.IO.FileStream mioLog = new System.IO.FileStream(@"C:\miofile.txt",System.IO.FileMode.OpenOrCreate);

   
//dichiariamo il TraceWriteTraceListener
   
   
TextWriteTraceListener mioListener = new TextWriteTraceListener(mioLog);
   
   
//ora aggiungiamo il mioListener alla Listeners Collection
   
   
Trace.Listeners.Add(mioListener);
}


Trace Switches: livelli e configurazione

I livelli del Trace sono definiti in un file XML con estensione .config i  livelli informativi del Trace sono:

            Nome                       Valore                    Messaggio

  • TraceLevel.Off               0                       nessuno
  • TraceLevel.Error             1                       errore
  • TraceLevel.Warning         2                       pericolo
  • TraceLevel.Info              3                       pericolo + piccola nota informativa
  • TraceLevel.Verbose         4                       pericolo + una descrizione dettagliata


NB.

Supponiamo di voler capire quale livello di Trace ha la nostra applicazione possiamo utilizzare le  proprietà booleane read-only della classe TraceSwitch quali: TraceSwitch.TraceError,TraceSwitch.TraceWarning, TraceSwitch.TraceInfo e TraceSwitch.TraceVerbose. Grazie ad esse otteniamo un valore di ritorno true in corrispondenza del livello definito, cioè se abbiamo definito TraceLevel.Error il corrispondente TraceSwitch.TraceErrorr è true.

  1. Creiamo il nostro file .config scegliendo Project\Add New Items e scegliamo tra i Templates il Application Configuration File
  2. All'interno di questo file XML andiamo a scrivere il codice che attiva il BooleanSwitch

 

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        
<!--Aggiungiamo questo blocco di codice -->
        
<switches.diagnostics>
            <switches>
                
<!--attiviamo il BooleanSwitch -->
                
<add name="mioBooleanSwitch" value="1" />
                
<!-- definiamo il livello del Trace -->
                
<add name="mioTraceSwitch" value="3"/>
             <
/switches>       
        <
/switches.diagnostics>
        
<!--fine del codice inserito -->
</configuration>

Una volta generato l'eseguibile il file XML deve risiedere nel suo stesso foldere e chimarsi ErroriTB.exe.config le domande su questo argomento sono diverse e sinceramente ho ancora più di qualche dubbio!!!! 

Penso che quasi quasi domani ripasso ADO.NET che sinceramente mi piace molto di più degli errori...

A domani!!!

Print | posted on martedì 31 gennaio 2006 01:53 | Filed Under [ C# ]

Feedback

Gravatar

# [OT] Oggi sono in vena di numeri

28/04/2006 23:07 | rosalba
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET