2009-07-28 8 views
1

Я унаследовал довольно большое приложение WPF, и мне нужно создать трассировку приложения для значительной части его. Из-за сложности проекта я хотел бы сделать это без внесения каких-либо изменений в базу кода, если это возможно. Мне в основном нужно знать дельтах стека, т. Е. Когда происходит вызов функции или возврат. Есть ли инструмент или методология, которые получат мне этот след (желательно) без изменений кода? Возможно ли это сделать даже без написания инструмента для добавления вызовов Trace к коду?инструмент для отслеживания приложений без изменений кода?

Если бы это было ограничено конкретными вызовами функций, я думаю, что я мог бы жить с этим. У меня есть инструмент, который может сделать это для вызовов win32 api, с помощью перезаписи таблицы импорта, чтобы перенаправить вызов функции dll на пользовательский заглушка, который регистрирует стек вызовов в этой точке. Если нет такого инструмента, который работает «из коробки» на .NET, знает ли кто-нибудь FAQ или что-то, что объясняет, как работает связь .NET DLL (таблица экспорта, thunks и т. Д.)?

ответ

1

Чтобы дать вам ответ, который был бы полезен, важно знать , почему вам нужна трассировка приложения.

Я думаю, один из:

  1. Для целей анализа (понимание вещей на уровне архитектуры). В этом случае было бы целесообразным использовать инструмент анализа статического кода, например NDepend;

  2. Для ведения журнала (еще раз, зачем вам конкретно нужно вводить вход и выходы метода?). В этом случае, поскольку вы не хотите менять источник, структура ориентации аспекта, которая вводит аспекты непосредственно перед выполнением, вероятно, вы ищете, например, PostSharp.

  3. Для целей анализа эффективности. В этом случае используйте инструмент, который поставляется с Visual Studio, или коммерческий инструмент, такой как ANTS Profiler.

Другие решения АОП существуют, которые будут пригодны для перехвата вызовов методов (например, Spring.NET), но они требуют внесения изменений в исходный код (хотя и относительно малых), которые вы уже сказали, что вы не заинтересованы в

+0

Из-за большого размера приложения, как вы говорите, я ищу архитектурный анализ. Я посмотрю в NDepend, спасибо за предложения :) –

1

Вы можете вводить вызовы метода (до Trace или что-то, что подходит вашему воображению) с использованием PostSharp Core, хотя это не готовое решение.

2

Runtime Flow (разработанный мной) обеспечивает автоматическую отслеживание приложений .NET без каких-либо изменений в базе кода.

0

IDE Visual Studio позволяет определять «точки останова», которые выводят строку для всех подключенных прослушивателей трассировки. Эта строка может быть составлена ​​из любого числа переменных в области видимости. По умолчанию эта точка останова не приостанавливает выполнение. Вы можете использовать файл конфигурации для подключения других прослушивателей трассировки, если вы хотите получить файл трассировки.

Эти определения точки останова сохраняются как часть состояния IDE вашего решения, поэтому вам не придется настраивать их каждый раз.

 Смежные вопросы

  • Нет связанных вопросов^_^