2009-03-19 4 views
1

Есть ли способ выяснить, называется ли какая-либо функция, определенная в коде?Есть ли способ проверить, вызваны ли все определенные функции?

Я делаю большое обновление кода для большого проекта, и я хочу, чтобы старые функции, которые больше не используются, удаляются из кода.

Есть ли лучший способ поиска каждой функции в решении?

+0

возможно дубликат [Есть ли инструмент для поиска неиспользуемых функций (мертвые, устаревший код) в C# приложении?] (Http://stackoverflow.com/questions/65585/is-there-a-tool -for-find-unreferenced-functions-dead-fat-ob-code-in-ac) – nawfal

ответ

7

Марк каждый метод вы пытаетесь удалить как Obsolete с IsError набор для true. Когда вы помечаете метод как таковой, вы получите ошибку компиляции и сможете узнать, можете ли вы безопасно удалите этот метод.

[Obsolete("Don't use this method", /* IsError */ true)] 
    public void Foo() {} 
+0

Я использую IsError для собственных внутренних библиотек. В других случаях я отказываюсь от него – Sung

+0

Я тоже это делаю. И часто оставляйте их такими, пока я не уверен, что они мне больше не нужны.Если я действительно не уверен, что мне это уже не нужно уже, конечно: p – Svish

+0

@Svish: Включение IsError иногда навязчиво, но иногда, когда он должен идти, он должен идти. – Sung

0

Инструмент покрытия кода, такой как NCover?

EDIT: Это предполагает, что у вас есть достаточные тесты для функциональности и вы решили избавиться от любой ненужной функции. Delete-then-compile будет работать, но не масштабируется. Несмотря на это, дело в том, что вам понадобится какой-то инструмент анализа исходного кода (либо статический, либо анализ времени выполнения).

0

Вот путь, который поймает все, кроме отражения.

  1. Удалить метод
  2. Compile

Это кажется немного излишним, но имеет то преимущество, что вы можете «пакетные» запросы на удаление нескольких функций.

+0

Заказ может иметь значение здесь? Если A() вызывает B(), но ничто не вызывает A(), удаление B() сначала будет вводить в заблуждение, поскольку оно не будет компилироваться. –

+0

@ Андрей, я не сказал, что это было легко :). – JaredPar

+0

@ JaredPar: Я думаю, что я прочитал об этом процессе от «Эффективно работаю с устаревшим кодом» Майкла Перса о том, как реорганизовать устаревший код без тестов. – Sung

2

FxCop должен уметь находить осиротевшие/неиспользуемые методы. Я думаю, что статический анализ - это то, что вы ищете, а не покрытие кода.

0

Два предложения:

  • В зависимости от ваших средств разработки, вы можете быть в состоянии генерировать предупреждения для функций, которые объявлены, но никогда не называется.

  • Возможно, вы сможете создать карту компоновщика, а затем сравнить свой список функций с созданным вами списком (с grep или ctags?) Прямо из вашего источника.

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