2011-02-04 72 views
2

我有写日志为.txt文件执行代码时有没有办法获得当前行号? C#

Helper.WriteSimpleDebugTrace(securityLogFilePath, "About to authenticate user."); 
Helper.WriteSimpleDebugTrace(securityLogFilePath, "Directory Search Path:"); 
Helper.WriteSimpleDebugTrace(securityLogFilePath, "Username:" + username); 

我只是想知道一个应用是有办法,我可以通过当前的行号到这种方法吗?

+1

Environment.StackTrace会给你整个stacetrace。也许解析它。由于这是一项昂贵的操作,您会希望对此非常小心。如果您发布没有pdbs的代码,那么这将不适用于生产。 ETA:http://peterkellner.net/2009/12/21/how-to-get-a-stack-trace-from-c-without-throwing-exception/有一个获取特定帧行号的例子。 – Sean 2011-02-04 17:09:33

+1

Scott Hanselman写了一篇简短的[博客文章](http://www.hanselman.com/blog/GettingTheLineNumberAndFileNameFromC.aspx)关于这个 – Cameron 2011-02-04 17:11:49

+0

肖恩 - 为什么你不加这个作为答案?我不能将它标记为答案:-)感谢您的信息。 – Exitos 2011-02-04 17:12:51

回答

2

你可能想要类似下面的方法。 Conditional属性将导致对此方法的所有调用在非调试版本中都会编译为无。然后,如果您抓取StackFrame 1而不是0,则会获得有关调用DebugPrintTrace的地方的信息。

[Conditional("DEBUG")] 
    public static void DebugPrintTrace(string message) 
    { 
     StackTrace stackTrace = new StackTrace(true); 
     StackFrame sf = stackTrace.GetFrame(1); 
     Console.WriteLine("Trace " 
      + sf.GetMethod().Name + " " 
      + sf.GetFileName() + ":" 
      + sf.GetFileLineNumber() + Enviroment.NewLine); 

     Console.WriteLine(message + Enviroment.NewLine); 


    } 

更重要的是还添加了condtitional “DEBUG” 你WriteSimpleDebugTrace

相关问题