2011-04-13 26 views
1

我想找出一些代碼的執行路徑(即它擊中的方法和順序)。有沒有工具,或通過視覺工作室或web.config的手段來顯示程序正在經歷的函數的順序?如何獲得代碼或堆棧跟蹤?

現在我正在調試點在某些地區,希望它擊中了正確的區域,但在某些情況下,這是一個漫長而緩慢的乏味過程。

+1

「在某些情況下,這是一個漫長而緩慢的過程。」 - 這是調試.... – hunter 2011-04-13 16:46:06

+0

有什麼*特定*你正在尋找? – 2011-04-13 16:47:12

+0

具有諷刺意味的是,我甚至沒有在正確的文件...我正在追逐煙霧和鏡子:( – chobo 2011-04-13 17:59:51

回答

2

如果你試圖找出哪些代碼調用一個特定的方法,你可以嘗試System.Diagnostics.StackFrame:

var s = new System.Diagnostics.StackFrame(); 
Console.WriteLine(s.ToString()); 

的StackFrame會給你的堆棧跟蹤當前線程。
請參閱MSDN:http://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe.aspx

如果您在尋找更多的細節,那麼對於您來說,探查器可能是更好的選擇。我已經使用了JetBrains中的dotTrace,它確實提供了很多細節。

編輯:
ASP.NET還提供tracing功能。如果你添加以下到您的web.config:

<system.web> 
    <trace enabled="true" /> 
    ... 
</system.web> 

,然後添加Trace="true"到你的頁面指令:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Trace="true" %> 

,那麼你會得到附加的底部一堆跟蹤輸出的你當你查看它時,

希望有所幫助。

+0

我喜歡打電話給stackframe。快速簡單,謝謝! – chobo 2011-04-13 17:58:03

+0

Np,很高興我可以幫助。 – rsbarro 2011-04-13 18:05:00

2

一些.NET分析工具可以提供這種類型的分析(通常稱爲Call Graph Analysis)。我知道的一個是ANTS profiler。但是,如果您正在尋找每個執行的方法和傳遞參數的詳細跟蹤信息 - 您可能會發現使用任何工具都很難獲得。如果這是您真正需要的,您可能需要使用像PostSHARP這樣的工具編織每個方法調用的跟蹤邏輯(您可以使用MethodBoundaryAspect來完成)。

0

那麼,我總是使用的一種方法是在函數中添加printfOutputDebugString(假設您有源代碼)。通過使用一些條件定義,您可以使這些調試信息僅在調試版本中顯示。

+0

這是一種我正在嘗試什麼,這是我有一個PHP項目時使用的。 – chobo 2011-04-13 17:58:38

0

Runtime Flow(由我開發)顯示了.NET程序正在執行的函數的順序。