0

我需要关于对象引用问题的建议。我收到这条消息ExceptionMessage: Object reference not set to an instance of an object。(因为一些空对象)发生错误时我正在打印堆栈跟踪:

 Exception systemException = lastError.GetBaseException();

通过使用 ex.Message,我可以获得发生异常的方法,但我没有获得有关发生异常的(该方法的)行的任何信息。我需要知道发生此异常时发生在哪一行对象引用以及哪个对象为空。

4

3 回答 3

4

您需要实际的堆栈跟踪:

systemException.StackTrace

如果您想要行号,则需要执行以下操作:

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

foreach(StackFrame frame in frames)
    frame.GetFileLineNumber();
于 2012-07-09T16:05:13.107 回答
0

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

于 2012-07-09T16:05:56.637 回答
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。我认为这是一个更好的答案。

于 2012-07-09T16:21:22.290 回答