有没有办法找出抛出异常的行?

Vac*_*ano 3 c# compact-framework exception-handling exception

说我有这样的方法:

public void SaveData()
{
   try
   {
        foreach (var somevar1 in list.SomeType1s)
        {
            CEData.SaveRow(sometype1)
        }    
        foreach (var somevar2 in list.SomeType2s)
        {
            CEData.SaveRow(sometype2)
        }    
        foreach (var somevar3 in list.SomeType3s)
        {
            CEData.SaveRow(sometype3)
        }    
        foreach (var somevar4 in list.SomeType4s)
        {
            CEData.SaveRow(sometype4)
        }    
        foreach (var somevar5 in list.SomeType5s)
        {
            CEData.SaveRow(sometype5)
        }    
   }
   catch (Exception e)
   {
     logger.DebugException("Rollback Occured with the following stack trace: \r\n" 
         + e.StackTrace, e);
     Rollback();
     throw;
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法知道在捕获部分我得到了什么?我的堆栈跟踪只会说它在方法SaveData()中,但不是哪一行失败.

我可以在每一行之间添加日志记录,但我不愿意(因为各种调试代码的原因).

所以,我想我会问.抛出异常时是否可以知道正在执行哪一行?


更多信息:

看起来行号应该是标准的.我可以看到我没有得到它们的唯一原因是我正在进行Windows Mobile和Compact Framework开发.那么也许它们不包含在紧凑的框架中?(我的项目为调试信息输出设置了"完整".)

p.c*_*ell 6

请使用以下StackFrame类中的类来考虑此代码段System.Diagnostics:

using System.Diagnostics;
....
catch (Exception ex) {
  StackTrace st = new StackTrace(new StackFrame(true));
  StackFrame sf = st.GetFrame(0);
  Console.WriteLine(" File: {0}", sf.GetFileName());
  Console.WriteLine(" Method: {0}", sf.GetMethod().Name);
  Console.WriteLine(" Line Number: {0}", sf.GetFileLineNumber());
  Console.WriteLine(" Column Number: {0}", sf.GetFileColumnNumber());
}
Run Code Online (Sandbox Code Playgroud)

对于特定于Compact Framework,.ToString()生成的错误是否包含行号?也许是这样的:

 catch(Exception ex)
 {string errDesc = ex.ToString();}
Run Code Online (Sandbox Code Playgroud)

揭示了:

"System.Exception:foo\r \n在MyProf.Class.MyMethod(int foo)中的D:\ sourcecode\somefile.cs:第1234行"