.NET:是否可以记录.NET程序集方法的调用?

4

在应用程序运行时记录 .NET 方法的调用是否可能?


监视已编译的汇编代码的行为并查看其实际执行情况。 - CJ7
4个回答

1

它会记录包括参数在内的方法的实际调用吗? - CJ7

1

也许您对以下选项中的一个感兴趣:

  1. 使用现有的分析器来可视化 .NET 方法的调用。这取决于分析器及其功能,但如果您不需要绝对特殊的东西,ANTS 或 DotTrace 就可以胜任。

  2. 如果您对包括调用时堆状态在内的低级实现感兴趣,则可能会对 WinDBG + Sos 及其跟踪选项(wt 命令)感兴趣。只需在 WinDbg 中设置断点,运行应用程序并收集包括低级调用在内的跟踪信息即可。

  3. 如果存在隐含的记录要求,则可以使用 .NET 分析 API(C++)记录您想要的所有内容,或者使用 dotTrace 分析器的分析 API(C#)(它与 dotTrace 一起提供)。

    希望能对您有所帮助。


我只需要知道正在进行的调用及其参数。有什么方法可以实现这一点? - CJ7
尝试第二种方法。"启动windbg -> 加载sos dll -> !CLRStack - p"。 请查看http://msdn.microsoft.com/en-us/library/bb190764.aspx获取更多信息。 - Andrey Taptunov
这需要源代码吗?因为我没有。 - CJ7
你确实需要符号(pdb文件)。对于.NET框架程序集,你可以从微软网站下载它。 - Andrey Taptunov
没有。客户机上只有编译后的DLL文件。 - CJ7
好的,那么您将看不到例如本地变量的名称和与源代码的关联,但参数的值和类型应该是可以的。 - Andrey Taptunov

1

是的,使用postsharp。完成“入门”教程,它基本上告诉您如何做您想要的事情。使用PostSharp,您可以在任何第三方程序集中“记录”方法调用。


抱歉,我没有注意到演示只有一个带源代码的示例。但是你绝对可以不用源代码来完成它,试试这篇文章吧,它是由编写PostSharp的那个人很久以前写的...http://www.codeproject.com/KB/cs/ps-custom-attributes-2.aspx基本上,你可以在你的assembly.info文件中使用类似以下的方式应用你的“方面”:-[assembly: PerformanceCounter(AttributeTargetAssemblies = "mscorlib", AttributeTargetTypes = "System.IO.*")] - wallismark

1

Craig,

你可以尝试使用Runtime Flow(由我开发)。这是一个新产品,例如无法捕获函数参数,但其主要目的是记录应用程序运行时调用的.NET方法。

目前,Runtime Flow最适合与可用源代码一起使用,但也可以配置为监视没有源代码的dll。


我需要它捕获参数。 - CJ7
Runtime Flow 现在支持捕获简单参数和返回值:http://blog.runtimeflow.com/2010/05/17/monitoring-function-parameters-and-return-values/ - Sergey Vlasov

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