异常堆栈跟踪没有行号

6
我在NetCore上发现了一个奇怪的问题,当你在服务器上运行应用程序时,堆栈跟踪没有行号。我创建了一个控制台应用程序,使用“dotnet new console”命令,并添加了以下代码:NetCore
using System;

namespace bar2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new InvalidOperationException("some error");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

稍后我将使用dotnet run运行该应用程序。

上述代码将打印:

System.InvalidOperationException: some error
at bar2.Program.Main(String[] args)

注意,在Linux上执行时没有行号(pdb文件在文件夹中可用)。

如何解决这个问题?对于生产应用程序,很难复制该错误,因为每次我都不知道文件行号,我只能看到错误...

NetCore信息 .NET命令行工具(2.1.200)

Product Information:
 Version:            2.1.200
 Commit SHA-1 hash:  2edba8d7f1

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  16.04
 OS Platform: Linux
 RID:         ubuntu.16.04-x64
 Base Path:   /usr/share/dotnet/sdk/2.1.200/

Host (useful for support):
  Version: 2.1.1
  Commit:  6985b9f684

.NET Core SDKs installed:
  2.1.200 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.1 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.1 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.7 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.1 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

我还尝试了"pdb only"设置下的调试模式和发布模式。


1
你是在发布模式还是调试模式下? - MakePeaceGreatAgain
即使使用 dotnet run -c Release 也无法重现。 - Panagiotis Kanavos
@HimBromBeere 我都试过了,在发布模式下我设置了“仅限 pdb”,但结果仍然相同。NetCore 版本为 2.0,使用的是控制台应用程序。 - jidic
@jidic 你试过什么?你使用了哪个版本的.NET Core?我无法在调试或发布模式下重现你描述的情况。使用Visual Studio创建的项目或使用dotnet new console创建的项目均无需重现。 - Panagiotis Kanavos
@PanagiotisKanavos 请查看我的更新。 - jidic
显示剩余8条评论
1个回答

4
  • 进入要查看堆栈跟踪行号的项目的属性窗口。

  • 点击“生成”垂直标签。

  • 选择“发布”配置。

  • 取消选中“优化代码”参数,以避免内联代码时偶尔出现的跟踪问题(此步骤不是必需的)。
  • 按下“高级...”按钮,选择“输出” -> “调试信息” -> “pdb-only”。
  • 将生成的.pdb文件与程序集一起部署。

另外需要检查的一件事是在“包/发布 Web”部分中,“排除生成的调试符号”复选框也未被选中。

有关更多信息,请参见以下链接:

在发布模式下为.NET程序集显示堆栈跟踪行号


很不幸,我已经完成了这个任务,现在我正在尝试将我的Ubuntu服务器更新到最新的2.1版本,以查看该版本是否存在此问题。 - jidic
2
@jidic,你忘了说你用的是什么操作系统。这很重要。正如我所说,我无法在Windows上复制你写的内容。如果运行时不支持它们,你可能无法通过更改项目属性来解决此问题。 - Panagiotis Kanavos

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