2013-06-21 13 views
7

Używam MvvmCross. W bibliotece widzę użycie metody Mvx.Trace, ale brak danych wyjściowych do okna konsoli/wyjścia. Jak z niego korzystać?Używanie MvvmCross Mvx.Trace

p.s. Ustawiłem stałą kompilatora Trace = true

Dzięki.

Odpowiedz

21

MvvmCross DebugTrace wszystko jest kierowane za pośrednictwem singleton realizacji IMvxTrace

Każda platforma dostarcza różne implementacje to:

  • platformy Windows używają Debug trace (bo sama Trace nie jest dostępny na wszystkich oknach Platformy)
  • Android używa podwójnego rejestru zarówno Debug, jak i Androida log
  • iOS wykorzystuje podwójny rejestr zarówno Debug i iOS Console

To działało dobrze we wcześniejszych wersjach MvvmCross, zwłaszcza tam, gdzie ludzie połączonych bezpośrednio do kodu źródłowego MvvmCross a więc może wiązać bezpośrednio albo do debugowania lub zwolnij MvvmCross pliki binarne.

Jednak ... ponieważ ludzie coraz częściej używają wersji Binarni z Nuget - w której oczywiście jest kompilowane Debug, to często pozostawia ludzi pytających "Jak z tego korzystać?"

Najprostszym sposobem jest zastąpienie inicjalizacji IMvxTrace w klasie Setup.

Łatwo to zrobić - np .:

protected override IMvxTrace CreateDebugTrace() { return new MyDebugTrace(); } 

gdzie MyDebugTrace jest coś takiego:

public class MyDebugTrace : IMvxTrace 
{ 
    public void Trace(MvxTraceLevel level, string tag, Func<string> message) 
    { 
     Debug.WriteLine(tag + ":" + level + ":" + message()); 
    } 

    public void Trace(MvxTraceLevel level, string tag, string message) 
    { 
     Debug.WriteLine(tag + ":" + level + ":" + message); 
    } 

    public void Trace(MvxTraceLevel level, string tag, string message, params object[] args) 
    { 
     try 
     { 
      Debug.WriteLine(string.Format(tag + ":" + level + ":" + message, args)); 
     } 
     catch (FormatException) 
     { 
      Trace(MvxTraceLevel.Error, tag, "Exception during trace of {0} {1} {2}", level, message); 
     } 
    } 
} 

Jeśli chciał zawierać różne implementacje dla debugowania/uwolnienia; jeśli chcesz włączyć/wyłączyć to w czasie wykonywania; jeśli chcesz filtrować na MvxTraceLevel lub tag; lub jeśli chcesz użyć mechanizmu logowania innej firmy, powinno to być łatwe do zrobienia za pomocą prostego C# na każdej platformie.

+0

Jak zwykle: szybko i szczegółową odpowiedź od Stuart. Dzięki! –

+4

Xamarin Android: Zamiast patrzenia na standardowe okno wyjściowe VS przejdź do funkcji View \ Other Windows \ Android Device Logging. Możesz filtrować według mvx, aby zobaczyć tylko ślady aplikacji. http: //docs.xamarin.com/guides/android/deployment, _testing, _and_metrics/android_debug_log –

4

Po prostu trafienie na systemie iOS z bieżącym rozwiązaniem dostarczonym przez Stuarta.

Uruchamianie sesji debugowania w VS przy użyciu MvxTrace przy użyciu Debug.WriteLine może być bardzo powolne w zależności od tego, jak obszerna jest rejestracja aplikacji. To samo dla Trace.WriteLinte. Zamiast tego należy użyć Console.WriteLine (ponieważ robi to MvvmCross MvxDebugTrace), co nie ma wpływu.

Zobacz tę pozycję bug Xamarin dla "bardziej" szczegóły: https://bugzilla.xamarin.com/show_bug.cgi?id=13538#c4

Powiązane problemy