问题
Is there a tool out there for visualizing dynamic call graphs? I saw a reference to one for Visual Basic 6 but I'd like one for .NET.
If I had to build a visualizer myself should I bother with the .NET profiling API or should I do something with Mono.Cecil? I started writing a CLI runtime with Cecil, but I guess it'd be easier if I just injected call-graph recording calls in the assemblies, although since I don't know the execution route ahead of time and would have to instrument everything.
回答1:
Profiling CLR is the purpose of the .NET Profiling API, so it seems to be perfect for your need. Most part of profiler products are based on top of it. But you'll have to write unmanaged code, urk.
Using Cecil is possible too, and pretty straightforward if you just want to record enter/exit of methods.
EDIT:
Well, PostSharp is probably the best solution, as it allows you to handle such a requirement by relying on static weaving. AOP provides a better level of abstraction than directly rewrite IL with Cecil.
回答2:
Maybe this open source project on CodePlex could help as starting point:
SequenceViz
http://www.codeplex.com/sequenceviz
"SequenceViz is a tool to generate sequence diagrams by reverse engineering .NET Assemblies. Although it does a little more than that in the later versions."
There is a standalone version and an implementation as reflector-plugin.
alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=sequenceviz&DownloadId=44432
回答3:
I love the CLR Profiler. I won't waste space by reproducing the documentation here, but it sounds like it is exactly what you are looking for.
回答4:
You coud use NProf, an open source project on Sourceforge. It allows you to extend the default GUI with new visualization tools.
"nprof is designed to be not only a fully-fledged profiler for .NET applications, but also a complete API that can be used to build other profiler front-ends, as well as extend the default GUI with new visualization tools."
来源:https://stackoverflow.com/questions/348881/how-can-i-see-a-visualization-of-a-dynamic-call-graph-for-a-net-program