2016-09-18 36 views
0

如果我在C#中具有类似下面的代码,其中MyClass是项目库中的某个类。我该如何做静态分析,并找出调用代码Method1和Method2的次数。程序集中的搜索方法名称

输出应该是:namespace.MyClass.Method1 = 4,namespace.MyClass.Method2 = 1个

namespace.MyClass obj = new namespace.MyClass() 
obj.Method1(); 
obj.Method2(); 

namespace.MyClass obj2 = new namespace.MyClass() 
obj.Method1(); 
obj.Method1(); 
obj.Method1(); 

感谢, D.

+0

声明似乎不需要思考的问题的工作方式所有(虽然它看起来像你试图使用它)。只需定义一个(也许)全局字典,并且每次调用一个方法时都会增加字典中的相应条目。 – mok

回答

0

在Visual Studio中,点击你的方法正确选择“查找所有参考”。

+1

我实际上需要在代码中做它作为静态代码分析的一部分,根据如何使用某些类和方法对代码进行分析。 – user3573411

+0

正如你想拦截方法调用,你正在寻找面向方面的编程。 https://msdn.microsoft.com/en-us/magazine/dn574804.aspx。 – Julien

0

如果您有Visual Studio Professional版本或更高版本,则可以使用Instrumentation分析来收集有关您的进程的信息。其中有计数器决定特定函数被放置在堆栈上的次数(函数被调用的次数)。

更多关于仪器分析 https://msdn.microsoft.com/en-us/library/ms182369.aspx

其他选项,如果你只需要计数,然后可以(使用Trace类https://msdn.microsoft.com/en-us/library/system.diagnostics.trace(v=vs.110).aspx或一些第三方库像log4net的)放置在你的方法开始日志呼叫,在执行后从日志文件中计数方法调用。

0

您可以使用工具NDepend编写C#LINQ查询以查看哪个方法正在调用哪个其他方法。

from m in Application.Methods 
select new { m, m.MethodsCallingMe } 

NDepend methods callers

您也可以右键单击一个特定方法,并生成一个查询来获取这个方法的调用者:

NDepend particular caller method, generating code query

结果是:

NDepend particular caller method

注意在上面的屏幕截图中,您还可以生成一个C#LINQ查询来获取方法的所有调用者(传递)(Menu 选择使用我的方法(直接和间接))。在这种情况下,查询结果可导出到依赖关系图,并且您可以看到您的方法的传递调用者。

NDepend transtive callers of a method

call graph可以关注一下:

NDepend transtive callers graph

声明:我NDepend的