如何查看 .NET 程序的动态调用图的可视化?
Posted
技术标签:
【中文标题】如何查看 .NET 程序的动态调用图的可视化?【英文标题】:How can I see a visualization of a dynamic call graph for a .NET program? 【发布时间】:2008-12-08 07:56:32 【问题描述】:是否有用于可视化动态调用图的工具?我看到了一个用于 Visual Basic 6 的工具,但我想要一个用于 .NET 的工具。
如果我必须自己构建一个可视化工具,我应该使用 .NET 分析 API 还是应该使用 Mono.Cecil? 我开始使用 Cecil 编写 CLI 运行时,但我想如果我只是在程序集中注入调用图记录调用会更容易,尽管因为我不提前知道执行路线并且必须检测所有内容.
【问题讨论】:
【参考方案1】:也许 CodePlex 上的这个开源项目可以作为起点:
序列可视化
http://www.codeplex.com/sequenceviz
“SequenceViz 是一个通过逆向工程 .NET 程序集来生成序列图的工具。虽然它在以后的版本中做得更多。”
有一个独立版本和一个作为反射器插件的实现。
alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=sequenceviz&DownloadId=44432
【讨论】:
我认为 marxidad 对 dynamic 调用图感兴趣,这意味着必须对执行进行分析。 SequenceViz 作为 Reflector 执行静态分析。 我知道 SequenceViz,但最难的部分是获取在运行时进行的实际调用。 我明白,但我认为您可以查看代码并将其作为基础(用于可视化部分)并“添加”分析内容 我在几个项目中尝试了 SequenceVis,它显示了我点击的第一种方法的图表,但在第 2 次进入了无限循环。好主意,但在当前状态下不是一个可行的工具。 更正我之前的评论 - 它确实有效,但速度很慢,对它所做的事情的反馈很差。【参考方案2】:分析 CLR 是 .NET Profiling API 的用途,因此它似乎非常适合您的需求。大多数分析器产品都基于它。但是你必须编写非托管代码,urk。
也可以使用 Cecil,如果您只想记录方法的进入/退出,这非常简单。
编辑:
嗯,PostSharp 可能是最好的解决方案,因为它允许您通过依赖静态编织来处理这样的需求。与使用 Cecil 直接重写 IL 相比,AOP 提供了更好的抽象级别。
【讨论】:
我更新了链接,因为旧链接已经死了。新位置的 PostSharp 似乎更专注于构建代码而不是分析现有代码,但我必须说我只看了一眼该站点。【参考方案3】:我喜欢CLR Profiler. 我不会通过复制此处的文档来浪费空间,但听起来这正是您正在寻找的。
【讨论】:
CLR Profiler 是否包括在函数调用序列中传递的函数参数? 它确实捕获了函数调用的序列,它可以以非常有用的视觉方式呈现出来,但它不捕获函数参数。【参考方案4】:您可以使用 NProf,这是 Sourceforge 上的一个开源项目。它允许您使用新的可视化工具扩展默认 GUI。
"nprof 不仅被设计为一个成熟的 .NET 应用程序分析器,而且还是一个完整的 API,可用于构建其他分析器前端,以及使用新的扩展默认 GUI可视化工具。”
【讨论】:
以上是关于如何查看 .NET 程序的动态调用图的可视化?的主要内容,如果未能解决你的问题,请参考以下文章