2009-07-28 55 views
1

我已经继承了一个相当大的WPF应用程序,并且我需要为其大部分生成应用程序跟踪。由于项目的复杂性,如果可能的话,我希望在不对代码库进行任何更改的情况下执行此操作。我主要需要知道堆栈变量,即何时发生函数调用或返回。有没有一种工具或方法能让我跟踪(最好)没有代码更改?这甚至有可能在没有编写工具的情况下将Trace调用添加到代码中?工具跟踪应用程序而无需更改代码?

如果它仅限于特定的函数调用,我想我可以忍受这一点。我有一个工具,可以做到这一点的win32 api调用,通过导入表重写将dll函数调用重定向到一个自定义存根,该存根在该点记录调用堆栈。如果没有这样的工具可以在.NET上“开箱即用”,那么是否有人知道常见问题解答或解释.NET DLL链接工作原理的东西(导出表,thunk等)?

回答

1

为了给你一个答案,这将是有用的,它真正重要的是要知道为什么需要应用轨迹。

我能想到的,一:

  1. 为了便于分析(在架构层面理解事物)。在这种情况下,什么是合适的是一个静态代码分析工具,如NDepend;

  2. 为了记录目的(再一次,为什么你需要知道方法的入口和出口?)。在这种情况下,由于您不想更改源代码,所以在执行之前注入方面的方面方向框架可能就是您要查找的内容,例如PostSharp

  3. 用于性能分析目的。在这种情况下,请使用Visual Studio附带的工具或商业工具,如ANTS Profiler

其他AOP解决方案存在将要适合拦截方法调用(如Spring.NET),但这些都需要到源,你已经说过,你不感兴趣的变化(虽然比较小的)

+0

由于应用程序的大小,我正在寻找一个架构分析,正如你所说。我会研究NDepend,感谢您的建议:) – 2009-07-28 13:54:50

1

您可以注入的方法调用(以Trace或任何适合你的想象)使用PostSharp Core,虽然它不是外的现成的解决方案。

2

Runtime Flow(由我开发)提供了.NET应用程序的自动跟踪,而不需要对代码库进行任何更改。

0

Visual Studio IDE允许定义向所有附加的跟踪侦听器输出字符串的“断点”。该字符串可以由任意数量的范围内变量组成。默认情况下,这种类型的断点不会暂停执行。如果需要跟踪文件,可以使用配置文件附加其他跟踪侦听器。

这些断点定义被保存为您的解决方案的IDE状态的一部分,因此您不必每次都设置它们。