- czy debuger zatrzymuje się na breakpoincie w bloku kodu oznaczonym jednym z podanych atrybutów
- czy debuger wykonuje
Step Intow blok kodu oznaczony jednym z tych atrybutów - jak w podglądzie
Call Stackpokazywane są wywołania metod oznaczonych tym atrybutem
| Atrybut | DebuggerHidden | DebuggerNonUserCode | DebuggerStepThrough | |||
| Just My Code | On | Off | On | Off | On | Off |
| Breakpoint | Ignorowany | Ignorowany | Ignorowany | Działa | Ignorowany | Działa |
| Step Into | Omija | Omija | Omija | Działa | Omija | Omija |
| Call Stack | Brak wpisu | Brak wpisu | External Code | Jest wpis | External Code | Jest wpis |
| Zastosowanie | Property Constructor Method | Class Struct Property Constructor Method | Class Struct Property Constructor Method | |||
property to nie odniesie to żadnego skutku: [System.Diagnostics.DebuggerNonUserCode()]
public int Z
{
get
{
return 6;
}
}Zamiast tego atrybut należy stosować osobno dla gettera i settera. Atrybuty, które można stosować dla konstruktorów, można także stosować dla konstruktorów statycznych. Jeśli dokonujemy Step Into w kod oznaczony jednym z podanych atrybutów (i Just My Code jest tak ustawione, że z zgodnie z tabelką ten blok kodu zostanie przeskoczony), a z bloku tego wywoływane są inne bloki kodu nie oznaczone żadnym z powyższych 3 atrybutów, to właśnie na tamtym bloku zatrzyma się debuger (niezależnie od kombinacji Just My Code i atrybutów). To jak przeskoczona metoda zostanie pokazana w Call Stack podano w tabelce. Weźmy taki przykład, dla włączone Just My Code [System.Diagnostics.DebuggerStepThrough()]
public int TestM()
{
return TestMM();
}
public int TestMM()
{
return 6;
}Po wstawieniu breakpointa na zaznaczoną linię w Call Stack zobaczymy: Console.WriteLine(Environment.StackTrace) będzie zawierać metodę TestM() Kiedy wyłączymy Just My Code, Call Stack będzie wyglądał tak: Just My Code, że ślad pomijanej metody nie będzie wogóle pokazywany:
Brak komentarzy:
Prześlij komentarz