2011-09-01 15 views
7

H Mamy funkcję narzędzia dziennika, którą często wywołujemy i chciałem ją urozmaicić, dodając wywołanie do Server.GetLastError() i jeśli wystąpił błąd podczas logowania. Funkcja rejestru jest częścią oddzielnego projektu, więc próbowałem użyć HttpContext.Current.Server.GetLastError() (tak jak w przypadku żądania, właściwości ServerVariables i Session). Podczas testów stworzyłem prosty wyjątek:

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

Aby dowiedzieć się, czy „HttpContext.Current.Server.GetLastError()” zwróci wyjątek podczas Tools.CooLog("out"); nazywa.

Zamiast tego miałem dwie duże niespodzianki: 1. W obu wywołaniach HttpContext.Current.Server.GetLastError() zwrócił wartość null. 2. A może najdziwniejsze jest to, że podczas pierwszego połączenia CooLoga w sekcji miejscowej zobaczyłem trochę mojej młodej, przystojnej i wersji PHP - widziałem, że istnieje wartość o nazwie $ wyjątek i, co zaskakujące, jest wyjątek, który uniemożliwił HttpContext.Current.Server.GetLastError() odzyskać!

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

więc moje pytania są 1. Dlaczego HttpContext.Current.Server.GetLastError() zwraca wartość null? (HttpContext.Current.Request.ServerVariables działa dobrze) 2. Skąd bierze się ten wyjątek? czy istnieje sposób, aby z niego skorzystać? (w drugim wywołaniu CooLoga zmienna jest niezdefiniowana)

Odpowiedz

6

To jest specjalna zmienna debuggera. Nie można uzyskać do niego dostępu za pomocą kodu.

Powodem nie widać go w oknie Watch, że wyjątek zostały w:

  • Handled

lub

  • zdarzenie Application.Error jeszcze nie został zwolniony.
+0

świetna odpowiedź informacyjna :) dziękuję – SimSimY

3

$exception to tylko wyjątek, który spowodował, że debugger wstrzymał wykonanie twojego programu. Jest to to samo, co wyjątek, do którego możesz uzyskać dostęp w bloku catch, w twoim przypadku E.

Powiązane problemy