如何打印出现对象引用的行号

时间:2012-07-09 16:00:36

标签: c# asp.net exception-handling

我需要有关对象引用问题的建议。我收到此消息 ExceptionMessage:对象引用未设置为对象的实例。(因为某些空对象)我在发生错误时打印堆栈跟踪:

 Exception systemException = lastError.GetBaseException();

通过使用ex.Message,我能够获得发生异常的方法,但是我没有获得有关发生异常的行(该方法)的任何信息。 当出现此异常时,我需要知道哪个行对象引用已发生,哪个对象为空

3 个答案:

答案 0 :(得分:4)

您需要实际的堆栈跟踪:

systemException.StackTrace

如果你想要行号,你需要做这样的事情:

StackTrace st = new StackTrace(systemException, true);
StackFrame[] frames = st.GetFrames();

foreach(StackFrame frame in frames)
    frame.GetFileLineNumber();

答案 1 :(得分:0)

该行号几乎可以保证在堆栈跟踪中。如果你想深入研究它,可以在可能发生的大块代码中放置一个try-catch,并在catch块上放一个断点,这将允许你通过visual studio内部的InnerExceptions下拉(如果任何存在的。)

答案 2 :(得分:0)

也许这有帮助

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string a = null;
                a.ToString();
            }
            catch (Exception ex)
            {
                var s = ex.StackTrace;
                Console.WriteLine(ex.Source);
                int st = s.LastIndexOf("line");
                Console.WriteLine(s.Substring(st, s.Length - st));
            }
        }
    }

编辑:

是的,我刚学会了,在EkoostikMartin发布的答案中使用了StrackTrace。 我认为这是一个更好的答案。