情景:
我最近了解了Mark Russinovich有用的DebugView *实用程序 使用DebugView,即使关闭vs2008,我也可以使用这样的语句:
System.Diagnostics.Debug.WriteLine("some text =. " + some_variable);
我想在编译时修改上面的内容,以包含源代码行号:
System.Diagnostics.Debug.WriteLine("nnnn: some text =. " + some_variable);
其中nnnn表示源代码行号。
AFAIK,要做到这一点,vs2008需要某种形式的元变量,如@linenumber,用于当前编译时源代码行号。即,如果Debug.Writeline声明
在第十行,然后这样的元变量== 10.
因此,上面的粗略示例等调试语句可以在多个地方使用,并且很容易识别每个调试语句的源代码位置。
问题: 是否有可在编译时引用的元变量 ?
P.S。:我无法通过Google和SO搜索功能找到这个问题的答案。
答案 0 :(得分:1)
这是我所知道的最好的方式来正确地获取ACTUAL线(即它是正确的线,因为它是在线的)
Debug.WriteLine(" hi there I am line number [" + (new StackTrace(new StackFrame(true)).GetFrame(0).GetFileLineNumber().ToString()) + "]");
答案 1 :(得分:0)
尽管我希望有一种方法可以更快地获取此信息,但您可以使用System.Diagnostics命名空间中的StackTrace类获取文件名和行号:
StackTrace st = new StackTrace(new StackFrame(true));
string fileName = st.GetFrame(0).GetFileName();
string lineNumber = st.GetFrame(0).GetFileLineNumber().ToString();
string fileNameAndLineNbr = fileName + ":" + lineNumber;
System.Diagnostics.Debug.WriteLine(fileNameAndLineNbr + ": some text =. " + some_variable);