C# 仪表板技术

4
什么是对C#代码进行插装的最简单方法?插装是指在执行过程中插入自己的代码以收集一些动态信息。
例如(星号代表一些不重要的代码):
for (int i=0; i<s.Length-2; ++i) {
  if (*)
    s = s.Substring(1, s.Length-2);
}

我希望能够捕捉到给i赋值为0,然后增加i的值并调用Substring方法。通过捕捉方法调用,我指的是我可以获取方法和参数的值等信息。
我尝试使用Roslyn来包装方法调用,这样可以a)拦截值并存储它们(例如),b)调用实际方法,c)返回结果。唯一的问题是,这种方法很容易出错且难以实现(因为有许多不同的情况需要考虑)。
我想知道是否已经有此类目的库,或者是否有更简单的方法来实现。谢谢!

1
你有Visual Studio Professional吗?它可以为你进行仪器化构建。它还可以使用采样,这种方法不太侵入但也不够准确。 - Matthew Watson
我忘了提到的是,我想要自动化地完成它。现在,我获取一个程序的源代码,对其进行插装(如上所述),编译并运行它,在运行时收集数据(每个步骤都是自动化的,因此输入是源代码和输出数据)。因此,使用VS并不是一个很好的选择... - Ivan
4
如果你想在运行时、在中间语言级别动态地对代码进行仪器化,你可以使用 ICLRProfiling API:http://msdn.microsoft.com/en-us/library/dd695931.aspx。 - Eric Lippert
@Ivan 我的意思是,如果你只是收集信息,比如各种方法花费了多少时间,以及特定方法或属性被访问的次数,Visual Studio可以自动为你完成这些操作,而无需你改变任何代码。 - Matthew Watson
@Matthew 我也想收集所有的参数和类似的数据并存储它们,然后进行计算。我还无法编写一个可以检测任何代码片段并输出结果或在其他程序中使用它作为过程的程序? - Ivan
显示剩余2条评论
1个回答

0
您可以使用以下工具:
- Cecil
- ReFrameworker
- MBEL
- RAIL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接