【问题标题】:View variable value in Release Mode - UWP - Windows 10在发布模式下查看变量值 - UWP - Windows 10
【发布时间】:2016-03-14 17:07:41
【问题描述】:

当我试图显示 InterstitialAd 广告时,我试图弄清楚我的 UWP 应用发生了什么。我想在两分钟后使用该应用程序后显示它,然后在我的应用程序中执行某些操作时每 5 分钟显示一次。它在调试模式下按预期工作,但在发布模式下没有,所以我试图在发布模式下调试我的代码以查看发生了什么,但我看不到我看不到变量的值。

我的 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 中看不到任何变量。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这包括查看变量吗?我已经设法通过暂时使它们成为类的静态和全局范围来查看我的局部变量的内容,但是我注意到在单步执行代码时,它实际上并没有跳转到正确的代码行,使它看起来像是在单步执行当它没有实际执行代码时进入“if(valid)”。我记录了另一个关于插页式广告的错误,因为它看起来像是一个错误,但还没有人回复我。也联系 MS,他们告诉我在他们的论坛上登录,我会这样做。
    【解决方案2】:

    在UWP中,Debug和Release编译配置有一些区别:

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

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

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

    另一个重要的区别是:

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

    更多信息请见:.NET Native – What it means for Universal Windows Platform (UWP) developers

    所以你可以参考Debugging .NET Native Windows Universal Apps在“发布模式”下调试你的代码。

    如果这仍然无法帮助您。您可以尝试使用 log system/library 来记录您想要查看的变量的值。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2020-03-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多