我继承了一个相当大的WPF应用程序,我需要生成应用程序的痕迹了它的显著部分。 由于该项目的复杂性,我想如果可能的话要做到这一点,而无需对代码库进行任何更改。 我大多需要知道堆栈的增量,即当一个函数调用或者退货发生。 是否有工具或方法,将让我这个跟踪(最好)更改代码? 这甚至可能没有写一个工具来跟踪调用添加到代码呢?
如果仅限于特定的函数调用,我想我可以忍受的。 我有一个工具,可以做到这一点的Win32 API调用,通过导入表格重写重定向DLL函数调用,它记录在该点的调用堆栈定制存根。 如果没有这样的工具,它的工作原理“开箱即用”的.NET,没有人知道一个常见问题,或一些解释.NET的DLL联动的工作方式(导出表,的thunk等)?
为了给你一个答案,这将是有用的,它真正重要的是要知道为什么你需要一个应用程序跟踪。
我能想到的一个:
为了便于分析(在架构层面理解事物)。 在这种情况下,这将是合适的是一个静态代码分析工具,如NDepend的 ;
为了记录的目的(再次,为什么特别将你需要知道的方法进入和退出?)。 在这种情况下,因为你不希望有改变源,面向方面的框架,注入方面之前执行的可能是你在找什么,比如, PostSharp 。
出于性能分析的目的。 在这种情况下,使用随Visual Studio中,或者一个商业工具,如工具蚂蚁探查 。
其他AOP解决方案存在将要适合拦截方法调用(例如, Spring.NET ),但这些都需要你已经说过,你不感兴趣的更改源(虽然相对较小的)。
运行时流 (由我开发)提供的.NET应用程序自动跟踪没有任何变化的代码库。
你可以注入的方法调用(以Trace
或任何适合你的想象)使用PostSharp核心 ,虽然它不是外的现成的解决方案。
在Visual Studio IDE允许“断点”是输出的定义字符串连接的所有跟踪侦听器。 这个字符串可以从任意数量的范围变量的组成。 默认情况下,该类型的断点不会暂停执行。 您可以使用配置文件中附加其他跟踪侦听器,如果你想有一个跟踪文件。
这些断点定义保存为您的解决方案的IDE状态的一部分,这样你就不必每次都设置它们。