Chciałbym dodać kod C # „tylko do debugowania”, który działa tylko wtedy, gdy osoba debugująca tego zażąda. W C ++ robiłem coś podobnego do następującego:
void foo()
{
// ...
#ifdef DEBUG
static bool s_bDoDebugOnlyCode = false;
if (s_bDoDebugOnlyCode)
{
// Debug only code here gets executed when the person debugging
// manually sets the bool above to true. It then stays for the rest
// of the session until they set it to false.
}
#endif
// ...
}
Nie mogę zrobić dokładnie tego samego w C #, ponieważ nie ma lokalnych statystyk.
Pytanie : Jaki jest najlepszy sposób osiągnięcia tego w C #?
- Czy należy używać pola statycznego klasy prywatnej z dyrektywami preprocesora języka C # (
#if/#endif DEBUG
)? - Czy powinienem użyć atrybutu warunkowego (do przechowywania kodu), a następnie pola statycznego klasy prywatnej ( nie otoczonego dyrektywami preprocesora C #
#if/#endif DEBUG
?). - Coś innego?
źródło
To, czego szukasz, to
[ConditionalAttribute("DEBUG")]
atrybut.
Jeśli na przykład napiszesz metodę taką jak:
[ConditionalAttribute("DEBUG")] public static void MyLovelyDebugInfoMethod(string message) { Console.WriteLine("This message was brought to you by your debugger : "); Console.WriteLine(message); }
każde wywołanie tej metody wewnątrz własnego kodu zostanie wykonane tylko w trybie debugowania. Jeśli budujesz swój projekt w trybie wydania, nawet wywołanie metody „MyLovelyDebugInfoMethod” zostanie zignorowane i usunięte z pliku binarnego.
Aha i jeszcze jedno, jeśli próbujesz określić, czy Twój kod jest obecnie debugowany w momencie wykonywania, możesz również sprawdzić, czy bieżący proces jest podpięty przez JIT. Ale to wszystko razem jest innym przypadkiem. Napisz komentarz, jeśli właśnie tego próbujesz.
źródło
Możesz spróbować tego, jeśli potrzebujesz kodu do uruchomienia tylko wtedy, gdy masz dołączony debugger do procesu.
if (Debugger.IsAttached) { // do some stuff here }
źródło
Myślę, że warto wspomnieć, że
[ConditionalAttribute]
znajduje się wSystem.Diagnostics;
przestrzeni nazw. Trochę się potknąłem, gdy dostałem:Error 2 The type or namespace name 'ConditionalAttribute' could not be found (are you missing a using directive or an assembly reference?)
po pierwszym użyciu (myślałem, że będzie
System
).źródło
Jeśli chcesz wiedzieć, czy debugowanie, wszędzie w programie. Użyj tego.
Zadeklaruj zmienną globalną.
bool isDebug=false;
Utwórz funkcję do sprawdzania trybu debugowania
[ConditionalAttribute("DEBUG")] public static void isDebugging() { isDebug = true; }
W metodzie initialize wywołaj funkcję
Teraz w całym programie. Możesz sprawdzić debugowanie i wykonać operacje. Mam nadzieję że to pomoże!
źródło