【问题标题】:tool to trace application without code changes?无需更改代码即可跟踪应用程序的工具?
【发布时间】:2010-11-14 13:18:36
【问题描述】:

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

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

【问题讨论】:

    标签: .net reverse-engineering trace


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        我能想到,其中之一:

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

        2. 出于日志记录的目的(再次说明,为什么您需要知道方法入口和出口?)。在这种情况下,由于您不想更改源,因此您可能正在寻找一个在执行之前注入方面的方面定向框架,例如,PostSharp

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

        存在其他适合拦截方法调用的 AOP 解决方案(例如,Spring.NET),但这些需要更改您已经说过您不感兴趣的源(尽管相对较小)。

        【讨论】:

        • 由于应用程序的大小,我正在寻找一个架构分析,如你所说。我会研究 NDepend,感谢您的建议:)
        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-10-15
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-10
          • 2011-08-10
          • 1970-01-01
          相关资源
          最近更新 更多