Visual Studio 2015:我无法在发布模式

时间:2017-02-15 17:36:37

标签: c# debugging uwp release breakpoints

我开发了一个 UWP应用,它使用了很多 NuGet包 MvvmLight,SQLite,... )和其他资源 Syncfusion控件)。

我遇到了商店应用程序的错误,该应用程序已经发布用于测试,当我在" 调试&#中构建应用程序时,该错误不存在34;模式。

所以,我已经尝试调试" 发布"模式,使用选中的选项" 使用.NET Native工具链编译"和" 优化代码"。构建成功结束,但我在应用程序的主页面上遇到Syncfusion控件( SfDataGrid )的异常。我想使用断点来了解会发生什么,但是当我在"发布"中构建应用时,它们会被停用。模式。

如果我在" 调试"中构建应用程序模式,选中相同的选项(" 使用.NET Native工具链编译"" 优化代码"),我没有遇到与Syncfusion控件相同的错误,并且定义好的断点得到了很好的保护。

所以我不知道如何解决我的问题:

  • 如果我创建新解决方案并在"发布"模式,断点很好,我可以调试代码
  • 如果我在"发布"中构建 Syncfusion示例模式,它是一回事:断点很好,我可以调试代码
  • 我比较了" build"应用程序的参数和其他的:它们是相同的
  • 我还查看了" 及时"页面,在Visual Studio" 选项"。我收到了以下错误:" 另一个调试器已将自己注册为即时调试程序。要修复,启用即时调试或运行Visual Studio修复。 "。我曾试图修复" Visual Studio,但它始终是一样的......

这是"选项"设置: enter image description here

解决方案中的结果,其中断点被禁用: enter image description here

您有任何解释吗?我怎样才能调试我的应用程序"发布"模式?

[编辑1]:在进一步调查后添加一些细节

我的应用基于" 模板"像Template10,名为 Nentang 。项目的结构是相同的,它们共享很大一部分引用或NuGets包。 但是,如果我比较"空白"的构建结果。 Nentang和我的解决方案,有一些我不理解的差异:

  • 正如所解释的那样,在我的应用中,断点和调试不会在"发布"模式,我可以看到几乎所有模块都没有任何" 符号文件":

Modules-my app

=>只有" ntdll.dll "和" KernelBase.dll "链接到本地​​目录中的pdb文件:" C:\ Users \ myname \ AppData \ Local \ Temp \ SymbolCache "

  • 在"空白" Nentang应用程序,断点和调试在"发布"模式,我可以看到几乎所有模块都有一个" 符号文件":

Modules-Nentang

=>所有一半的模块都链接到" 项目"中的相同文件。目录:" C:\ Projects \ Samples ... \ Nentang.UWP \ bin \ x64 \ Release \ AppX \ Nentang.UWP.pdb "

=&GT;另一个四分之一的模块链接到&#34; 系统&#34;的相同文件目录:&#34; C:\ Program Files(x86)\ Microsoft SDKs \ Windows Kits \ 10 \ ExtensionSDKs \ Microsoft.NET.Native.Framework.1.3 \ 1.3 \ x64 \ ret \ Native \ SharedLibrary.pdb < / EM>&#34;

=&GT;其他模块没有链接到符号文件:&#34; ntdll.dll &#34;和&#34; KernelBase.dll &#34;

如何恢复&#34;符号文件&#34;我的项目?

我还评论了一个&#34;奇怪的&#34;我的解决方案的属性中的参数,即不存在的是Nentang属性: SolutionProperties 有这个参数:&#34; f:\ dd \ ndp \ fxcore \ CoreRT \ src \ System.Private.CoreLib \ src \ System \ Runtime \ ExceptionServices \ ExceptionDispatchInfo.cs &#34;

这是什么意思?它可以解释我的问题吗?

1 个答案:

答案 0 :(得分:2)

调试优化代码总是一个挑战 - 使用.NETNative更是如此。以下是您可以尝试的一些事项:

  • 禁用我的代码
  • 抑制JIT优化:这对使用.NETNative工具链构建的模块无效。如果在没有.NETNative的Release版本中发生异常,则检查名为&#34的调试器选项; 抑制模块加载时的JIT优化(仅限管理)&#34;。顾名思义,这将导致CLR到JIT编译代码未经优化,这将允许您设置断点并检查本地。
  • 查看“输出”窗口,查找出错的线索。异常消息将在那里,前面的消息可能有助于诊断原因。
  • 使用Native调试引擎调试您的应用程序。您可以通过选中项目属性的“调试”选项卡下的“本机”复选框来执行此操作。
  • 最后的办法是调试程序集。