我想找出一些代碼的執行路徑(即它擊中的方法和順序)。有沒有工具,或通過視覺工作室或web.config的手段來顯示程序正在經歷的函數的順序?如何獲得代碼或堆棧跟蹤?
現在我正在調試點在某些地區,希望它擊中了正確的區域,但在某些情況下,這是一個漫長而緩慢的乏味過程。
我想找出一些代碼的執行路徑(即它擊中的方法和順序)。有沒有工具,或通過視覺工作室或web.config的手段來顯示程序正在經歷的函數的順序?如何獲得代碼或堆棧跟蹤?
現在我正在調試點在某些地區,希望它擊中了正確的區域,但在某些情況下,這是一個漫長而緩慢的乏味過程。
如果你試圖找出哪些代碼調用一個特定的方法,你可以嘗試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" %>
,那麼你會得到附加的底部一堆跟蹤輸出的你當你查看它時,
希望有所幫助。
一些.NET分析工具可以提供這種類型的分析(通常稱爲Call Graph Analysis)。我知道的一個是ANTS profiler。但是,如果您正在尋找每個執行的方法和傳遞參數的詳細跟蹤信息 - 您可能會發現使用任何工具都很難獲得。如果這是您真正需要的,您可能需要使用像PostSHARP這樣的工具編織每個方法調用的跟蹤邏輯(您可以使用MethodBoundaryAspect來完成)。
那麼,我總是使用的一種方法是在函數中添加printf
或OutputDebugString
(假設您有源代碼)。通過使用一些條件定義,您可以使這些調試信息僅在調試版本中顯示。
這是一種我正在嘗試什麼,這是我有一個PHP項目時使用的。 – chobo 2011-04-13 17:58:38
Runtime Flow(由我開發)顯示了.NET程序正在執行的函數的順序。
「在某些情況下,這是一個漫長而緩慢的過程。」 - 這是調試.... – hunter 2011-04-13 16:46:06
有什麼*特定*你正在尋找? – 2011-04-13 16:47:12
具有諷刺意味的是,我甚至沒有在正確的文件...我正在追逐煙霧和鏡子:( – chobo 2011-04-13 17:59:51