我正在使用Visual Studio 2010编写一个C#程序,我希望将某些事件写入日志文件,并包含代码所在的行号.
我只发现了两种捕获行号的方法 - CallerLineNumber,它需要.Net 4.5/C#5(我的目标是.Net 4)和StackFrame.GetFileLineNumber,这显然需要调试版本和pdb文件才能正常工作,我正在生成一个发布版本,没有pdb文件.
但这是我没有得到的 - 以上都是运行时解决方案,但行号是编译时实体.为什么需要运行时解决方案?
我可以输入正确的行号作为文字常量,只需查看屏幕底部的内容,如"ln 175"...
LogEvent("It happened at line 175");
Run Code Online (Sandbox Code Playgroud)
但问题是,如果我在第175行之前编辑任何代码,我的文字可能不再正确.但编译器知道正确的行号,并且我过去曾使用过编程语言,它们只能将正确的行号作为编译时常量弹出.(例如,ANSI C和Microsoft C++支持预定义的宏调用
_LINE_)有没有办法让C#这样做?如果没有解决我的问题?
小智 1
一种选择是使用StackTrace 类,如下所示
[Conditional("DEBUG")]
public static void DebugPrintTrace()
{
StackTrace st = new StackTrace(true);
StackFrame sf = st.GetFrame(1);
Console.WriteLine("Trace "
+ sf.GetFileName() + " "
+ sf.GetMethod().Name + ":"
+ sf.GetFileLineNumber() + "\n");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |