【问题标题】:C# trace (log) all code lines between two pointsC# 跟踪(记录)两点之间的所有代码行
【发布时间】:2015-06-08 16:17:36
【问题描述】:

是否可以在我的应用程序的 VS 2013 (C#) 跟踪(到文件)执行路径中?我的意思是逐行,就好像我在断点后一直按 F11,手动写下行......结果日志可能很大,我知道,但是?

我当然想要源代码行,而不是 MSIL。

【问题讨论】:

标签: c# visual-studio visual-studio-debugging


【解决方案1】:

是的,这是可能的,但是这需要访问源文件,如果您 真的很需要源代码。

使用CallerInformationAttributes

C# 4.5 要求:

int _beginIndex;

public void BeginTrace(
    [CallerFilePath] string sourceFilePath = "",
    [CallerLineNumber] int sourceLineNumber = 0)
{ 
    _beginIndex = sourceLineNumber;
}

public void EndTrace(
    [CallerFilePath] string sourceFilePath = "",
    [CallerLineNumber] int sourceLineNumber = 0)
{
    int index = 0;
    foreach(var line in File.ReadLines(sourceFilePath))
    {
       if(index++ > _beginIndex && index <sourceLineNumber)
           Console.WriteLine(line);
    }
}

然后像这样使用它:

  BeginTrace();

  Foo foo = new Foo();
  foo.DoSomeStuff();
  foo.Bar();

  EndTrace();

这个例子只适用于同一个文件中的开始和结束,除非你传递一些对象,否则其他任何事情都很难完成......

【讨论】:

  • 很有趣,但工作起来很奇怪,不像我预期的那样。它显示每一行,甚至是注释行。非常重要 - 它不会进入功能。如果在 BeginTrace() ... EndTrace() 之间的同一页面上,则以某种方式显示来自无法访问的代码(具有 0 个引用的过时函数)的行。
猜你喜欢
  • 2014-01-09
  • 1970-01-01
  • 2012-03-29
  • 2019-01-13
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
相关资源
最近更新 更多