相关疑难解决方法(0)

堆栈跟踪上的行号错误

我有这个代码

try
{
  //AN EXCEPTION IS GENERATED HERE!!!
}
catch  
{
   SqlService.RollbackTransaction();
   throw;
}

上面的代码在此代码中调用

try
{
  //HERE IS CALLED THE METHOD THAT CONTAINS THE CODE ABOVE
}
catch (Exception ex)
{
   HandleException(ex);
}

作为参数传递给方法"HandleException"的异常包含堆栈跟踪中"throw"行的行号,而不是生成异常的实际行.任何人都知道为什么会发生这种情况?

编辑1 好的,谢谢大家的答案.我更改了内部捕获


catch(Exception ex)
{
    SqlService.RollbackTransaction();
    throw new Exception("Enrollment error", ex);
}

现在我在堆栈跟踪上有正确的行,但我不得不创建一个新的异常.我希望找到更好的解决方案:-(

EDIT2 也许(如果你有5分钟)你可以尝试这种情况,以检查你是否得到相同的结果,而不是很复杂的重新创建.

c# exception-handling try-catch

30
推荐指数
4
解决办法
7394
查看次数

堆栈跟踪中的行号错误

问题

在我们的ASP .net网站上,我一直在异常的堆栈跟踪中得到错误的行号.我在谈论我们的现场环境.似乎有一种模式:堆栈跟踪将始终指向包含方法的右大括号的行.

例如:

public class Foo
{
    public void Bar()
    {
        object someObject = null;
        someObject.ToString();
     /*
          arbitrarily more lines of code
     */
     } // this line will be the one that the stack trace points to
}
Run Code Online (Sandbox Code Playgroud)

更多细节

  • 需要明确的是:这不仅适用于某些方法,而是发生在我们记录的每个异常中.所以我会在这里排除(JIT)优化,这可能会导致行号看似随机关闭.困扰我的是,错误的行号似乎始终指向包含方法的右大括号.

  • 请注意,在.net 4.6之前,框架中确实存在一个错误,如果您编译了目标x64,那么确实会发生这种情况.但是,微软证实这已得到修复.同时运行一个最小的示例应用程序,重申他们的主张.但由于某种原因,它仍然发生在Web服务器上.

  • 令我更困惑的是,它在我们的测试和开发环境中不会发生.测试和实时系统设置非常相似.唯一真正的区别是我们正在运行Windows Server 2012,而在测试系统上我们仍在使用Windows Server 2008.

我检查了什么

  • pdb文件有效(使用chkmatch测试)
  • 编译时间代码优化不是问题
  • 在4.6之前的.net中提到的错误不能用最小的例子再现
  • .NET版本完全相同
  • Build来自相同的部署脚本

解决这个问题的任何线索都受到高度赞赏.如果您知道我们可以查询的任何内容,请告诉我们.

.net c# asp.net

21
推荐指数
2
解决办法
5357
查看次数

标签 统计

c# ×2

.net ×1

asp.net ×1

exception-handling ×1

try-catch ×1