在发布模式下查看变量值 - UWP - Windows 10

时间:2016-03-14 17:07:42

标签: c# win-universal-app windows-10-universal

当我尝试展示InterstitialAd广告时,我试图弄清楚我的UWP应用正在发生什么。我希望在两分钟后使用应用程序后显示它,然后每隔5分钟显示一次,当我的应用程序中有一些操作。它在调试模式下按预期工作,但在发布模式下没有工作,因此我尝试在发布模式下调试我的代码以查看正在进行的操作,但我无法看到我能够&# #39; t看到变量的值。

我在app.xaml.cs中的代码非常简单:

public static void VideoAdvertCheck()
{
    if (!IsCoreFeaturesLocked || AdRequested)
        return;

    double elaspedTime;
    bool valid;

    Debug.WriteLine("Elapsed Time since last advert: {0}", 
            DateTime.Now.Subtract(AdvertTimeStart).TotalMinutes);

#if DEBUG
    elaspedTime = DateTime.Now.Subtract(AdvertTimeStart).TotalMinutes;
    valid = elaspedTime >= (AdNeverDisplayed ? 1 : 1);
#else
    elaspedTime = DateTime.Now.Subtract(AdvertTimeStart).TotalMinutes;
    valid = elaspedTime >= (AdNeverDisplayed ? 2 : 5);
#endif

    if (AdNeverDisplayed && valid)
        AdNeverDisplayed = false;

    //2 minute or 5 minutes has elapsed.
    if (valid)
    {
        RequestVideoAdvert();
    }
}

elapsedTimevalid变量都是在条件编译语句中声明的,我把它们移出来希望它有所帮助,但无济于事。

即使2分钟没有过去,valid似乎仍然是真的,所以为什么它首先是真的,为什么不能评估我的变量和/或条件,例如

valid = elaspedTime >= (AdNeverDisplayed ? 2 : 5);
我的应用程序启动后,

AdNeverDisplayed设置为true。

任何人都可以在这个逻辑中看到任何错误,但更重要的是我如何在发布模式下调试它。

请注意,问题出现在发布模式(笔记本电脑上)以及我的应用程序在商店中发布并直接下载到手机上时。

我认为这个问题不仅仅适用于通用应用,因为它是非常通用的代码。

我注意到的一件事是,当处于发布模式并且请求了InterstitialAd时,它会触发Cancelled偶数。没有意义!

更新 - 1:

我应该提到它在设置断点时停在断点上,但我在LocalsAutosWatch中看不到任何变量。

2 个答案:

答案 0 :(得分:0)

对于发布模式,禁用调试功能。您需要创建额外的UI以在屏幕上显示值。

答案 1 :(得分:0)

在UWP中,Debug和Release编译配置之间存在一些差异:

  

在“调试”配置中构建和运行时,您正在针对应用程序中打包的CoreCLR运行IL代码。 .NET系统程序集与应用程序代码一起打包,并且您的应用程序依赖于Microsoft.NET.CoreRuntime(CoreCLR)程序包。

     

这意味着您可以获得最佳的开发体验 - 快速编译和部署,丰富的调试和诊断,以及您习惯使用.NET开发的所有其他工具。

     

当您切换到“发布”模式时,默认情况下您的应用程序使用.NET Native工具链。由于包被编译为本机二进制文件,因此该包不需要包含.NET框架库。此外,该软件包依赖于最新安装的.NET Native运行时而不是CoreCLR软件包。设备上的.NET Native运行时将始终与您的应用程序包兼容。

另一个重要区别是:

  

默认情况下,发布配置会优化丢失一些用于调试的工件的代码。因此,尝试调试Release配置可能会导致一些问题。您可以做的是创建自定义配置并为该配置启用.NET Native工具链。确保不优化代码。有关此问题的更多详细信息,请参见here

有关详细信息,请参阅:.NET Native – What it means for Universal Windows Platform (UWP) developers

因此,您可以参考Debugging .NET Native Windows Universal Apps以“发布模式”调试代码。

如果这仍然无法帮助你。您可以尝试使用日志系统/库来记录您想要查看的变量的值。