如何以编程方式为Visual Studio添加跟踪点?

时间:2009-04-27 00:53:38

标签: visual-studio debugging

我正在寻找一种监控正在运行的程序的方法,我有源代码。基本上,当用户运行它时,我需要知道顺序调用哪些函数和参数。

我可以为所有函数编写跟踪输出代码来实现这一点。但是,我不允许修改源代码。 我发现Visual Studio 2005中的Tracepoint允许我这样做 - 输出日志信息而不修改源代码。但我需要将它们添加到所有功能中。

由于我有成千上万的文件和函数,我需要找到一种以编程方式执行此操作的方法。我发现了能够添加断点的DTE.Debugger.Breakpoints.Add。但是,我无法找到跟踪点的任何方法。或者项目的断点信息存储在哪里?我无法在sln或vcproj中找到它。或者有没有办法以编程方式将断点转换为跟踪点?我看到我可以通过更改“When Hit”属性对话框来手动更改它。

谢谢!

5 个答案:

答案 0 :(得分:4)

您应该将断点转换为EnvDTE80.Breakpoint2。然后你就可以使用

breakpoint.BreakWhenHit = false; 
breakpoint.Macro = "YourMacro";

答案 1 :(得分:1)

.NET Profiler将允许您查看执行哪些方法以及在不修改源代码的情况下每次执行的时间。它基本上将特殊代码注入编译的程序集中。

答案 2 :(得分:0)

您还可以查看面向方面的编码。根据我的理解,这将改变由属性控制的编译程序集,通常用于向所有方法/属性添加跟踪。

How can I add a Trace() to every method call in C#?

答案 3 :(得分:0)

解决方案的第一部分:

DTE.ExecuteCommand( “EditorContextMenus.CodeWindow.Breakpoint.InsertTracepoint”)

它打开光标所在行的TP窗口。但是,您仍然必须按Return键才能选择OK。足以满足我的需求 - 至少你不必右键点击等等。

答案 4 :(得分:0)

我认为这是解决方案......这个宏在程序的Main方法中添加断点,然后将所有断点转换为跟踪点。

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