工具跟踪应用程序而无需更改代码?

时间:2009-07-28 01:03:45

标签: .net reverse-engineering trace

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

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

4 个答案:

答案 0 :(得分:2)

Runtime Flow(由我开发)提供.NET应用程序的自动跟踪,无需更改代码库。

答案 1 :(得分:1)

您可以使用PostSharp Core注入方法调用(Trace或任何适合您的方法),尽管它不是开箱即用的解决方案。

答案 2 :(得分:1)

为了给您一个有用的答案,了解为什么您需要应用程序跟踪非常重要。

我能想到,其中一个:

  1. 用于分析目的(了解架构层面的事物)。在这种情况下,适当的是静态代码分析工具,例如NDepend;

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

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

  4. 其他AOP解决方案适用于拦截方法调用(例如Spring.NET),但这些需要更改源(虽然相对较小),您已经说过,您不感兴趣

答案 3 :(得分:0)

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

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