2009-07-28 67 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狀態的一部分,因此您不必每次都設置它們。