我需要有关对象引用问题的建议。我收到此消息 ExceptionMessage:对象引用未设置为对象的实例。(因为某些空对象)我在发生错误时打印堆栈跟踪:
Exception systemException = lastError.GetBaseException();
通过使用ex.Message,我能够获得发生异常的方法,但是我没有获得有关发生异常的行(该方法)的任何信息。 当出现此异常时,我需要知道哪个行对象引用已发生,哪个对象为空。
答案 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。 我认为这是一个更好的答案。