2009-04-27 2 views
1

Я ищу метод для мониторинга запущенной программы, у которой есть исходный код. В основном, когда пользователь запускает его, мне нужно знать, какие функции и параметр называются последовательно.Как программно добавить трассировку для Visual Studio?

Я могу написать код вывода трассировки ко всем функциям для достижения этого. Однако мне не разрешено изменять исходный код. Я узнал, что Tracepoint в Visual Studio 2005 позволяет мне это делать - выводить информацию о журнале без изменения источника. Но мне нужно добавить их ко всем функциям.

Поскольку у меня есть тысячи файлов и функций, мне нужно найти способ программно сделать это. Я узнал о DTE.Debugger.Breakpoints.Add, который может добавить точку останова. Тем не менее, я не мог найти способ отслеживания. Или где информация о контрольной точке для сохраненного проекта? Я не смог найти его в sln или vcproj. Или есть способ конвертировать точку останова в трассировку программно? Я вижу, что я могу изменить его вручную, изменив диалоговое окно свойств «When Hit».

Спасибо!

ответ

0

Вы также можете ознакомиться с аспектно-ориентированным кодированием. По моему мнению, это изменит скомпилированную сборку, контролируемую атрибутами, и обычно используется для добавления трассировки ко всем методам/свойствам.

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

+0

Я читаю на AspectC++, поскольку я работаю над кодом на C++. Он также имеет доступ к значениям аргументов. Он должен хорошо служить моей цели. Спасибо всем за помощь. – Darren

1

Профилировщик .NET позволит вам увидеть, какие методы выполняются и как долго они выполняются без изменения исходного кода. Он в основном вводит специальный код в скомпилированную сборку.

+0

Вы имеете в виду профайлер производительности или памяти? Я тоже думал об использовании средства проверки кода. Но мне нужно знать значение параметров/переменных функции. Я думаю, что профилировщик не может зарегистрировать эту информацию правильно? И мне также нужно знать порядок вызова функции - какая функция вызывается в первую очередь. Используя точку следа, я могу это знать. – Darren

+0

Профилировщик производительности, который я использую в настоящее время (от EQUATEC), позволяет мне развернуть конкретные методы в том порядке, в котором они были вызваны. Что касается просмотра параметров, переданных каждому методу, я не уверен. У меня действительно не было необходимости в чем-то подобном. Извините, я не мог больше помочь. –

0

Первая часть решения:

DTE.ExecuteCommand ("EditorContextMenus.CodeWindow.Breakpoint.InsertTracepoint")

Он открывает окно TP для линии, где находился курсор. Однако вам все равно придется нажать Return, чтобы выбрать OK. Достаточно для моих нужд - по крайней мере, вам не нужно щелкнуть правой кнопкой мыши и т. Д.

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"; 
Смежные вопросы