我继承了一个相当大的WPF应用程序,我需要为它的很大一部分生成应用程序跟踪。由于项目的复杂性,如果可能的话,我想在不对代码库进行任何更改的情况下执行此操作。我主要需要知道堆栈增量,即函数调用或返回时。是否有一种工具或方法可以让我(最好)没有代码更改?如果没有编写工具来为代码添加Trace调用,这甚至可以做到吗?
如果仅限于特定的功能调用,我想我可以忍受。我有一个工具可以为win32 api调用执行此操作,通过导入表重写将dll函数调用重定向到在该点记录调用堆栈的自定义存根。如果没有这样的工具在.NET上“开箱即用”,有没有人知道常见问题解答或解释.NET DLL链接如何工作的东西(导出表,thunks等)?
答案 0 :(得分:2)
Runtime Flow(由我开发)提供.NET应用程序的自动跟踪,无需更改代码库。
答案 1 :(得分:1)
您可以使用PostSharp Core注入方法调用(Trace
或任何适合您的方法),尽管它不是开箱即用的解决方案。
答案 2 :(得分:1)
为了给您一个有用的答案,了解为什么您需要应用程序跟踪非常重要。
我能想到,其中一个:
用于分析目的(了解架构层面的事物)。在这种情况下,适当的是静态代码分析工具,例如NDepend;
用于记录目的(再一次,为什么你需要知道方法入口和退出?)。在这种情况下,由于您不希望必须更改源,因此在执行之前注入方面的方面方向框架可能就是您要查找的内容,例如PostSharp。
用于性能分析。在这种情况下,请使用Visual Studio附带的工具或ANTS Profiler等商业工具。
其他AOP解决方案适用于拦截方法调用(例如Spring.NET),但这些需要更改源(虽然相对较小),您已经说过,您不感兴趣
答案 3 :(得分:0)
Visual Studio IDE允许定义“断点”,将字符串输出到所有连接的跟踪侦听器。该字符串可以由任意数量的范围内变量组成。默认情况下,这种断点不会暂停执行。如果需要跟踪文件,可以使用配置文件附加其他跟踪侦听器。
这些断点定义保存为解决方案IDE状态的一部分,因此您不必每次都设置它们。