2011-09-01 12 views
7

H Abbiamo la funzione di utilità di registro che chiamiamo abbastanza spesso e ho voluto ravvivarlo aggiungendo una chiamata a Server.GetLastError() e se c'è un errore da registrare pure. La funzione di registro è parte di un progetto separato, quindi ho provato a utilizzare HttpContext.Current.Server.GetLastError() (come faccio per le proprietà Request, ServerVariables e Session). Durante i test ho creato semplice eccezione:

int i=0, j=0; 
try 
{ 
    int k = i/j; 
} 
catch (Exception E) 
{ 
    Tools.CooLog("in"); 
} 
Tools.CooLog("out"); 

Al fine di scoprire se "HttpContext.Current.Server.GetLastError()" restituirà l'eccezione quando Tools.CooLog("out"); si chiama.

Invece ho avuto due grandi sorprese 1. In entrambe le chiamate HttpContext.Current.Server.GetLastError() restituito nulla. 2. E forse il più strano è che durante la prima chiamata di CooLog nella sezione locali ho visto un po 'della mia versione giovane, bella e PHP - ho visto che c'è un valore chiamato $ exception e sorprendentemente ha l'eccezione che HttpContext.Current.Server.GetLastError() fallito recuperare!

$exception is defined and HttpContext.Current.Server.GetLastError() fails

Quindi le mie domande sono 1. Perché la HttpContext.Current.Server.GetLastError() restituisce null? (HttpContext.Current.Request.ServerVariables funziona correttamente) 2. Da dove proviene l'eccezione $? c'è un modo per usarlo? (nella seconda chiamata a CooLog la variabile non è definita)

risposta

6

Questa è una variabile di debugger speciale. Non puoi accedervi tramite codice.

La ragione per cui non lo si vede nella finestra di controllo, è che l'eccezione è uno stato:

  • Handled

o

  • L'evento Application.Error non è stato ancora licenziato.
+0

ottima risposta informativa :) grazie – SimSimY

3

$exception è solo l'eccezione che è stata la ragione per cui il debugger ha messo in pausa l'esecuzione del programma. Questa è la stessa eccezione a cui è possibile accedere nel blocco catch, nel tuo caso E.

Problemi correlati