如何在发布模式下使用“.Net Native工具链”调试UWP应用程序

4
我开发了一个全球通用的UWP应用程序,但在Store应用程序或发布版本中遇到了一些问题,而在调试版本中一切正常。该应用程序似乎非常基础:它允许用户通过Web服务创建和同步表单。在应用程序启动时,会进行测试以查看用户是否已登录:如果没有,则应用程序导航到“登录”页面;否则,它会导航到包含表单列表的“主页”页面。然后用户可以通过“详细信息”页面编辑每个表单。在“调试”模式下,我没有遇到任何未捕获的异常,一切正常。最新版本的Store应用程序已经成功生成并验证,没有任何问题。但是,我的最后一次更改引发了应用程序崩溃,当用户从“详细信息”页面返回“主页”页面时。
我猜测这次更改主要是为了引发错误:我在“详情”视图中添加了一些代码,通过“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工具链"在"发布"模式下构建应用程序。
"发布"模式:
在"发布"模式下,我已经检查好了选项"使用 .NET Native 工具链"和"优化代码"。 enter image description here 应用程序可以正确启动并正常导航到"登录"页面。但是,在用户连接后,应用程序尝试导航到"主页"页面: 我得到了2个异常,并且我无法做任何其他操作...
第一个异常发生一次,我可以"继续": enter image description here 第二个异常每次都会发生,即使我尝试继续:enter image description here 我尝试添加一些MessageDialog来查看错误发生的位置,但消息不会显示在构造函数中:所以我无法确定问题的来源...
“使用本机工具链的调试模式”
最后,我又尝试了一次“调试”模式,但使用了“使用.NET本机工具链编译”和“优化代码”的选项。
但是这样做很好,我无法重现在“发布”模式下遇到的错误...
我没有其他想法,也无法回答这些问题:
为什么商店版本和发布模式之间存在差异?
我该如何在发布模式下使用应用程序?是否可以进行“调试”?
我必须在发布模式下启动应用程序以修复商店版本遇到的错误...
问候,
2个回答

3
默认情况下,发布配置会对代码进行优化,导致某些用于调试的构件丢失。因此,尝试调试发布配置可能会出现一些问题。

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

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

有关更多详细信息,请参见调试.NET本机Windows通用应用程序


感谢@Jay Zut:这对我没有用。我已经像你的链接中一样添加了一个新的配置:“Release”,并选中了“使用.NET Native工具链进行编译”和取消选中了“优化代码”。但断点始终无法使用:“当前不会命中断点。未为此文档加载任何符号”。您可以在这里查看我的其他测试。 - Gold.strike

1
我曾经遇到同样的问题。经过长时间的尝试和错误,我使用了.NET本机工具链,在另一台电脑上进行远程调试(在我的情况下是Surface),最终成功在发布模式下进行调试。

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

希望这可以帮助您。

问候。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接