2012-04-20 2 views
2

Я пытаюсь проверить, освобождают ли методы, которые приобретают ресурс. Каков наилучший инструмент для поиска вызывающих методов в классах в одном файле jar? Могу ли я сделать это с помощью CheckStyle или FindBugs? Как?Найти вызывающих методов

Я думаю, я могу сделать это, используя BCEL или подобное, но я никогда раньше не работал с байтовым кодом и занимал слишком много времени, чтобы сделать это.

Поиск «графика вызовов java» не нашел ничего полезного, но это, по-видимому, очень простая функциональность, поэтому я, вероятно, пропустил хороший матч. Тем не менее, я бы не хотел генерировать весь график вызовов в этом очень большом проекте.

+0

Трудно сделать рекомендацию, не зная, какие ресурсы вы пытаетесь провести аудит. В зависимости от «чего» и «как» вы можете взглянуть на инструмент AOP, такой как Javassist, или инструмент анализа потока вызовов, такой как Soot. – Perception

+0

@Перцепция Я встретил Сао в моем поиске, который, я думаю, выполнит эту работу, но для этого потребуется некоторое программирование. Я надеюсь найти что-то, что я могу использовать сразу для * произвольных * ресурсов - скажем, я хочу найти все методы в банке, которые вызывают 'SomeResource.acquire' –

+0

Конечно, FindBugs имеет функции для поиска незакрытых потоков. Я не знаю, насколько обобщена эта поддержка. –

ответ

1

Проверить this link. Похоже, он может соответствовать вашим требованиям.

+0

Вы должны, вероятно, также назвать и описать то, что вы связываете, учитывая, что ссылки умирают и перемещаются. – pvg

1

Вы можете взглянуть на реализацию Eclipse Call Hierarchy. Может быть, это немного помогает.

+0

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

+0

Я просто хотел дать вам «вдохновение» для вашей собственной реализации. –

+0

Но как я беру вдохновение из кода, который * отображает * граф вызовов, когда я пытаюсь * создать * граф вызовов? –

1

Я не использовал его сам, но считаю, что Java Callgraph будет делать то, что вы хотите.

+0

+1 Да, 'Java Callgraph' выполняет эту работу. Другой плакат предложил это сначала, поэтому я буду ждать, пока он создаст ответ, который я могу принять. –