在WinRT中异常堆栈中的行号

4
我们有一个使用WinRT(以及XAML、C#)的Windows Store应用程序项目。问题是,当某个异常被抛出并且我使用Debug.WriteLine(ex);记录异常时,没有行号,因此我不知道实际上异常是在哪里抛出的。当然,在“项目属性”>“生成”>“高级”>“调试信息”中,我已经将DEBUG配置设置为“完整”的符号集。
起初,我认为这一定是我们项目中的问题。然而,当我从微软下载了一些示例,并在其中放置了以下代码时,异常仍然没有行号。
        try
        {
            throw new Exception("Test");
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }

如果我将上面的代码放入OnNavigatedTo方法中,我会得到以下结果:
System.Exception: Test
   at SDKTemplate.MainPage.OnNavigatedTo(NavigationEventArgs e)

没有行号……

在文章、书籍等中,没有提到不应该有行号,但也许我漏掉了什么?这可能与VS的版本有关吗?我正在使用VS2013。还是某些系统范围的设置?

3个回答

5
发生的情况是,Visual Studio没有将.pdb文件(符号)包含在执行应用程序的路径中。在我的机器上,可执行文件的路径看起来像这样:
C:\Users\msmall\Documents\Visual Studio 2013\Projects\DebugLineNUmbers\DebugLineNUmbers\bin\Debug\AppX
这是VS打包可执行文件并将其部署到本地机器上运行的地方。AppX文件夹内没有.pdb文件。你最终会得到这样的结果:
System.Exception: Test
  at DebugLineNUmbers.MainPage.OnNavigatedTo(NavigationEventArgs e)

然而,你可以将.pdb文件从Debug文件夹中向上移动一个级别,放入AppX文件夹中,这样就可以得到行号:

System.Exception: Test
  at DebugLineNUmbers.MainPage.OnNavigatedTo(NavigationEventArgs e) in
  c:\Users\msmall\Documents\Visual Studio 2013
  \Projects\DebugLineNUmbers\DebugLineNUmbers\MainPage.xaml.cs:line 36

1
谢谢Matt,这真的解决了问题。很奇怪,因为我有信心在几周前尝试过这个方法,但它没有起作用:) 这就是我发布这个问题的原因。然而,现在它可以工作了。现在,请问你能告诉我为什么VS不会自动复制pdbs吗?在VS中是否有一些设置?你如何在你的项目中解决这个问题?我相信你不会手动复制它...我也相信,这不是默认行为(不自动复制pdbs)。 - Ondrej Peterka
Visual Studio默认情况下不会在输出文件夹中包含商店应用程序的符号,因为它们是调试功能,并提供有关反向工程商店应用程序的信息。要启用此场景,请使用后期构建事件命令将PDB复制到输出文件夹中。请记住,当您实际调试时,VS知道如何读取符号,并将调试器设置为遇到异常时的行。但是,您并没有这样做-您希望应用程序本身知道用于记录目的的行号。这与商店应用程序的概念不一致。 - Matt Small
嗯,这对我来说真的很奇怪。我不明白为什么这不是常规的调试配置的一部分。无论如何,感谢您的意见。在赏金到期之前,我会接受这个答案。 - Ondrej Peterka
@MattSmall 我已经将 .pdf 文件从 debug 文件夹移动到 Appx 文件夹中,然后重新构建了解决方案。但是行号仍未包含在内。 - lbrahim

1
也许这篇帖子能帮到你:行号

我读了这篇文章。然而,它涉及到不同的问题。那个人需要从生产环境(发布的应用程序)获取行号。我的问题是,即使在调试中,我也没有行号...这很奇怪。 - Ondrej Peterka

1
我还不能添加评论,所以这里是一个新的答案,补充了已接受的答案。
导航到:
项目->[项目名称]属性...->构建事件->后期构建事件命令行:
添加以下行以将pdb文件复制到AppX目录:
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(TargetDir)\AppX"

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