2009-04-27 49 views
1

我正在尋找一種方法來監視正在運行的程序,我有源代碼。基本上,當用戶運行它時,我需要知道順序調用哪些函數和參數。如何以編程方式爲Visual Studio添加跟蹤點?

我可以寫一個跟蹤輸出代碼到所有函數來實現這一點。但是,我不允許修改源代碼。 我發現Visual Studio 2005中的Tracepoint允許我這樣做 - 在不修改源的情況下輸出日誌信息。但我需要將它們添加到所有功能。

由於我有成千上萬的文件和函數,我需要找到一種編程方式來做到這一點。我發現了關於DTE.Debugger.Breakpoints.Add的問題,可以添加一個斷點。但是,我找不到任何跟蹤點的方法。或者項目的斷點信息存儲在哪裏?我無法在sln或vcproj中找到它。或者有沒有辦法將斷點轉換爲跟蹤點?我發現我可以通過改變「When Hit」屬性對話框來手動改變它。

謝謝!

回答

1

.NET分析器將允許您查看哪些方法被執行以及每個方法需要多長時間而無需修改源代碼。它基本上將特殊代碼注入編譯後的程序集。

+0

你的意思是性能或內存分析器?我也想過使用代碼覆蓋檢查器。但我也需要知道函數參數/變量的值。我認爲探查器無法記錄這些信息嗎?我還需要知道函數調用的順序 - 哪個函數首先被調用。使用tracepoint,我能夠知道這些。 – Darren 2009-04-27 01:36:43

+0

我目前使用的性能分析器(來自EQUATEC)允許我按照它們被調用的順序深入到特定的方法。至於查看傳遞給每個方法的參數,我不確定。我沒有真的需要這樣的事情。抱歉,我無法提供更多幫助。 – 2009-04-27 01:55:17

0

第一部分:

DTE.ExecuteCommand( 「EditorContextMenus.CodeWindow.Breakpoint.InsertTracepoint」)

打開用於在光標是線的TP窗口。不過,您仍然必須按回車鍵才能選擇確定。足夠我的需求 - 至少你不必右鍵點擊等

0

我認爲這是解決方案...這個宏添加一個斷點你的程序的主要方法,然後將所有斷點進入跟蹤點。

Sub AddBreakpointToMain() 
    Dim bp As EnvDTE80.Breakpoint2 
    Dim bps As EnvDTE.Breakpoints 


    bps = DTE.Debugger.Breakpoints.Add("Main") 
    For Each bp In bps 
     bp.Tag = "SetByMacro" 
     bp.BreakWhenHit = False 
     bp.Message = "Hi, this is your tracepoint calling." 
    Next 
End Sub 
4

您應該將您的斷點轉換爲EnvDTE80.Breakpoint2。那麼你就可以使用

breakpoint.BreakWhenHit = false; 
breakpoint.Macro = "YourMacro"; 
相關問題