异常堆栈跟踪是否可以为空?

时间:2014-02-10 21:53:22

标签: c# exception

我发现如果我捕获异常e,e.innerException可能为null。

在catch块的任何可能情况下,e.StackTrace是否也可能为null?

try {

}
catch(Exception e)
{
//can e.StackTrace be null here?
}

3 个答案:

答案 0 :(得分:15)

如果您创建new Exception()并且不抛弃它,则除DataMessage之外的所有属性都将为空。

答案 1 :(得分:3)

证明StackTrace在catch块中可以为null的示例同样无关紧要显示:

public class DerpException : Exception
{
    public override string StackTrace
    {
        get { return null; }
    }
}

答案 2 :(得分:0)

如果您使用exception.StackTrace作为空值,则有可能 带有try-catch的函数的[HandleProcessCorruptedStateExceptions]属性,用于捕获异常,以及是否从本机代码引发异常。

System.AccessViolationException异常类型可能具有StackTrace为空。

不确定这是否与Debug / Release构建和/或生成的pdb文件有关。 我在Release版本中观察到这种崩溃。