相关疑难解决方法(0)

在发布模式下显示Stack Trace for .NET程序集中的行号

有没有办法在发布模式下显示.NET程序集构建/部署的堆栈跟踪中的行?

更新:

我的应用程序分为三个类库项目和一个ASP.NET"网站"项目.我试图追踪的错误是在三个类库项目之一.我只为生成"未设置为对象实例的对象引用"错误的类库项目部署了pdb文件.

行号仍未显示在堆栈跟踪中.我是否需要为所有项目部署pdb文件以获取堆栈跟踪中的行号?

工作方案

为每个应用程序部署pdb文件修复了行号问题.

.net c# stack-trace line-numbers visual-studio

136
推荐指数
5
解决办法
8万
查看次数

获取ASP.NET Core中发生异常的行号

我已经基于这篇博客文章https://blog.kloud.com.au/2016/03/23/aspnet-core-tips-and-tricks-global-exception-handling/实现了一个自定义异常过滤器.

我现在注意到我无法从StackFrame获取发生异常的文件名或行号; 方法GetFileLineNumber的值始终为0.

我试过的一个简单示例:

StackTrace trace = new StackTrace(exception, true);
StackFrame[] stackFrames = trace.GetFrames();
if (stackFrames != null) {
 foreach (StackFrame traceFrame in stackFrames) {
   sourceFile = traceFrame.GetFileName();
   sourceLineNumber = traceFrame.GetFileLineNumber();
  }
}
Run Code Online (Sandbox Code Playgroud)

要提一下:GetFileName也返回null,但我可以从不同的位置获取命名空间和类名,所以这不是问题.

在某个地方注意到我应该在文件夹上有PDB文件才能工作,我检查过我已经拥有它.即使它起作用,它也应该在生产环境中起作用.

尝试使用来电信息(https://msdn.microsoft.com/en-us/library/mt653988.aspx),但有一个不同的问题.异常过滤器必须实现IExceptionFilter接口并使用它的方法.因此,即使它们是可选的,我也无法添加属性.

这是Startup.cs的代码部分:

public void ConfigureServices(IServiceCollection services) {
 ...
 services.AddMvc(config => {
  config.Filters.Add(new ApplicationExceptionFilter());
 });
}
Run Code Online (Sandbox Code Playgroud)

这是自定义过滤器

public class ApplicationExceptionFilter : IExceptionFilter {
 public void OnException(ExceptionContext context) {
  ApplicationExceptionHandler.handleException(context.HttpContext, context.Exception);
 }
}
Run Code Online (Sandbox Code Playgroud)

我尝试获取来电者信息的原因是:

public void OnException(ExceptionContext context,
 [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

7
推荐指数
1
解决办法
1382
查看次数