【问题标题】:How to debug an UWP app in Release mode + ".Net Native tool chain"如何在Release模式下调试UWP应用+“.Net Native工具链”
【发布时间】:2017-07-01 17:15:03
【问题描述】:

我开发了一个可以在全球范围内正常运行的 UWP 应用,但我在使用 Store 应用或 Release 版本时遇到了一些问题,而在 Debug 构建中一切正常...

这个应用看起来很基础:ts 允许用户通过 web 服务创建和同步表单。在应用程序启动时,会进行测试以查看用户是否已登录:如果不是,应用程序导航到“登录”页面,否则导航到“ 主页”页面,其中包含表单列表。然后用户可以通过“Details”页面编辑每个表单。

“调试”模式:

当我在“调试”模式下构建应用程序时,我没有遇到任何未被捕获的异常并且一切正常

商店应用:

Store 应用程序的最新版本已成功生成并验证,没有任何问题。但是当用户从“详细信息”页面返回到“主页”时,我的最后一项更改引发了应用崩溃页面。

我特别怀疑这个更改会引发错误:我在“Details”视图中添加了一些代码,以通过“OnNavigatedFrom()”清理资源:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    ViewModel = this.DataContext as DetailsViewModel;
    if (!ViewModel.ToChildNavigate)
    {
        // Dispose resources
        this.Resources.Clear();
        this.Loaded -= DetailsPage_Loaded;
        ViewModel = null;
    }
    base.OnNavigatedFrom(e);            
}

为了解决这个问题,我想使用“.Net Native 工具链”以“发布”模式构建应用程序。

“发布”模式:

在“发布”模式下,“Compile with .NET Native tool chain”和“Optimize code”这两个选项我已经检查好了.

应用程序正确启动并在“登录”页面中正常导航。但是在用户连接之后,应用程序尝试导航到“Home”页面:我得到2个异常,我不能做任何其他事情... p>

第一个异常发生一次,我可以“继续”:

即使我尝试继续,每次都会出现第二个异常:

我尝试添加一些 MessageDialog 来查看错误发生在哪里,但是消息没有显示在构造函数中:所以我无法确定问题的根源......

带有“原生工具链”的“调试”模式

最后,我再次尝试在“调试”模式下构建应用,但使用选项“使用 .NET Native 工具链编译”和“优化代码” >”。

但是像这样,它工作正常,我无法重现在“发布”模式下遇到的错误......

我没有其他想法,也无法回答这些问题:

  • 为什么 Store 版本和 Release 模式有区别?
  • 如何才能在发布模式下使用该应用程序?是否可以“调试”它?
  • 我必须在发布模式下启动应用程序以修复商店版本遇到的错误...

问候,

【问题讨论】:

    标签: c# xaml uwp native release


    【解决方案1】:

    发布默认配置优化代码会丢失一些用于调试的工件。因此,尝试调试 Release 配置可能会导致一些问题。

    需要注意的是,Release 配置默认是完全优化的代码(例如,code inlining 将在许多地方应用)。这些优化将对调试体验产生重大影响,包括不可预测的步进和断点行为(由于代码内联)以及由于内存优化而无法检查大多数变量。

    因此,要在“发布”模式下调试 UWP 应用,我们可以创建自定义配置并为该配置启用 .NET Native 工具链。确保不优化代码。

    更多详情请见Debugging .NET Native Windows Universal Apps

    【讨论】:

    • 谢谢@Jay Zut:这对我不起作用。我在您的链接中添加了一个新配置:ReleaseCompile with .NET Native toolchain 已选中,Optimize code 未选中。但是断点总是不可用的:“断点当前不会被命中。没有为此文档加载任何符号”。可以看我的其他测试here
    【解决方案2】:

    前段时间我也遇到了同样的问题。经过长时间的尝试和错误,我能够在发布模式下使用 .net 本机工具链进行调试,并在另一台电脑上进行远程调试(在我的情况下,它是一个表面)。

    我使用了 Visual Studio 2017,并在远程计算机上使用了 2017 年的远程调试器工具。

    希望这会有所帮助。

    您好。

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 2016-04-17
      • 2019-04-24
      • 2020-01-26
      • 2022-01-22
      • 2021-02-02
      • 1970-01-01
      • 2022-07-06
      • 2020-06-11
      相关资源
      最近更新 更多