如何查看 .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 程序的动态调用图的可视化?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看程序中函数间的调用关系?

用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!

如何使用 Extjs 动态改变柱形图的颜色?

如何使用 coreplot 动态交换条形图的颜色

如何从一个动态链接库DLL中查看接口函数

将 Charles Proxy 与 .NET Core Azure 站点一起使用 - 如何查看 API 调用?