【问题标题】:windows 10 exceptions not including line numbersWindows 10 异常不包括行号
【发布时间】:2016-01-17 00:05:43
【问题描述】:

我有一个 Windows 10 通用应用程序,它在异常对象 .ToString() 方法中不包含行号。

如果我有类似的方法

private void ThrowException()
{
    try { throw new Exception("Test"); }
    catch (Exception e) { Debug.WriteLine(ex.ToString()); }
}

当我检查输出时,我没有看到引发异常的行号。我在项目中添加了一个 Post Build 事件:

xcopy $(ProjectDir)$(OutDir)*.pdb $(ProjectDir)$(OutDir)AppX\*.pdb

pdb 文件在 Debug 文件夹中,但不在 AppX 文件夹中。

我错过了什么?谢谢,

编辑

我创建了一个新项目来测试它。我有一个页面(MainPage.xaml)。这是文件背后的代码:

using System;
using Windows.UI.Popups;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace App2
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            ThrowException();
        }

        private async void ThrowException()
        {
            try { throw new Exception("Test"); }
            catch (Exception ex) { await new MessageDialog(ex.ToString()).ShowAsync(); }
        }
    }
}

和以前一样,我添加了构建后事件宏:

xcopy $(ProjectDir)$(OutDir)*.pdb $(ProjectDir)$(OutDir)AppX\*.pdb

我在 Release 配置中编译并确保选中了“Compile with .NET native tool chain”选项。

C:\VS2015\App2\App2\bin\x86\Release\AppX 中的 Appx 文件夹确实存在 App2.dll 和 App2.pdb 文件。

当我运行应用程序时,我会在弹出对话框中看到以下内容:

System.Exception: Test
  at SharedLibrary!<BaseAddress>+0x122d16

感谢

编辑 2

我也在没有本地工具链的调试中尝试过这个。在那种情况下,我没有在 Debug 下的 AppX 文件夹中看到 pdb 文件

在这种情况下的消息是:

System.Exception: Test
  at App2.MainPage.<ThrowException>d_2.MoveNext()

感谢

【问题讨论】:

  • 能否先查看启动应用时的输出信息,例如我的显示“$(ProjectDir)\bin\x86\Debug\AppX\entrypoint\UwpApp1.exe'. Symbols loaded”,它表明 pdb 文件已加载属性。
  • 我看到了同样的问题。我可以验证 pdb 文件是否已加载属性。我怀疑这是由于 .net 核心“轻量级”实现。
  • FWIW,当我运行应用程序时,我确实在输出窗口中注意到以下条目 'App2.exe' (Win32): Loaded 'C:\VS2015\App2\App2\bin\x86\Release\AppX\App2.exe'. Module was built without symbols.'App2.exe' (CLR Native Compilation v1.0): Loaded 'C:\VS2015\App2\App2\bin\x86\Release\AppX\App2.dll'. Symbols loaded. 这相关吗?
  • 这是 WinRT 应用程序的类似帖子。 stackoverflow.com/questions/26867558/…
  • 但是,正如您所观察到的,我仍然无法让它适用于 UWP 应用程序。不幸的是,UWP Exception 类引用了 System.Runtime.dll(而不是 mscorlib.dll),它还没有开源。

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


【解决方案1】:

我在原始答案中出错,使用的是即时窗口输出,而不是代码可以从异常对象中获得的内容。

经过更多研究,似乎不再支持此功能。

请参阅corefx #1420 和相关的corefx #1797

另外,在 SO 上有这个参考:How to get StackTrace without Exception in Windows Universal 10 App

【讨论】:

  • 这对行号信息有什么帮助?
  • 您尝试过这个建议吗?我在我的观察中添加了有关复选框效果的详细信息。
  • 我对“使用 .NET Native 工具链编译”也没有运气,也许我在这里遗漏了一些东西。我也想知道如何解释原帖。
  • 请看我上面编辑过的帖子。我在那里包含了完整的 MainPage.xaml.cs 文件内容。本机工具链选项没有帮助。谢谢。
  • 使用 .NET Native ToolChain 构建对我有用,我现在可以看到行号了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2021-10-17
  • 2020-11-28
  • 1970-01-01
  • 2017-07-30
  • 2011-09-24
相关资源
最近更新 更多