8

我正在使用 MvvmCross。在库中,我看到了 Mvx.Trace 方法的用法,但没有输出到控制台/输出窗口。如何使用它?

ps 我已经设置了编译器常量 Trace = true

谢谢。

4

2 回答 2

21

MvvmCross DebugTrace 都是通过单例实现路由的IMvxTrace

每个平台都提供了不同的实现:

  • Windows 平台使用Debug跟踪(因为Trace它本身并非在所有 Windows 平台上都可用)
  • Android 使用双日志Debug和 Androidlog
  • iOS 使用双日志Debug和 iOSConsole

这在 MvvmCross 的早期版本中运行良好,尤其是人们直接链接到 MvvmCross 源代码,因此可以直接绑定到调试或发布 MvvmCross 二进制文件。

然而......因为人们现在越来越多地使用 Nuget 的发行版二进制文件——其中Debug当然是编译出来的,所以这经常让人们问“如何使用它?”

最简单的方法是覆盖类中 IMvxTrace 的初始化Setup

这很容易做到 - 例如:

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

MyDebugTrace类似的东西在哪里:

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);
        }
    }
}

如果您想包含不同的调试/发布实现;如果您想在运行时打开/关闭它;如果你想过滤MvxTraceLevelor tag; 或者如果您想使用一些第三方日志引擎,那么在每个平台上使用简单的 C# 也应该很容易做到这一点。

于 2013-06-21T11:24:31.487 回答
4

使用 Stuart 提供的当前解决方案在 iOS 上遇到问题。

在 VS 中使用 MvxTrace 运行调试会话Debug.WriteLine可能会非常慢,具体取决于您的应用程序日志记录的详细程度。对Trace.WriteLinte. 改用不受影响的Console.WriteLine(如 MvvmCrossMvxDebugTrace所做的)。

有关“更多”详细信息,请参阅此 Xamarin 错误项目:https ://bugzilla.xamarin.com/show_bug.cgi?id=13538#c4

于 2014-12-31T19:59:22.077 回答