Как я могу узнать, у какого объекта есть файл, открытый в Java? - PullRequest
3 голосов
/ 05 октября 2011

Мне нужно выяснить , какой объект в моем приложении Java имеет открытый файл. Это для отладки, поэтому инструменты или утилиты приветствуются.

Если найти , какой объект слишком специфичен, то какой класс также будет очень полезен.

Ответы [ 2 ]

4 голосов
/ 05 октября 2011

Это может быть сложно. Вы можете начать с использования профилировщика, например VisualVM (бесплатно) или YourKit (не бесплатно), для проверки java.io.File объектов в памяти. Если вы можете найти тот путь, который вас интересует, это может указать вам правильное направление. Проблема в том, что объект File не обязательно должен существовать, чтобы приложение все еще имело открытый файл.

Следующим шагом может быть установка точек останова в FileInputStream и FileOutputStream (если только вы не знаете, читается или записывается файл), присоедините отладчик и наблюдайте за Ваш файл будет открыт одним из них. Но, конечно, есть и другие способы открытия файлов. Вам также может понадобиться разбить такие вещи, как Class.getResourceAsStream () и URL.openConnection () , например.

В крайнем случае вы можете попробовать всезнающий отладчик, например ODB или TOD . У меня только ограниченный опыт работы с ними, но они утверждают, что "знают все". Вам просто нужно придумать, как правильно задать вопрос.

0 голосов
/ 05 октября 2011

Используйте AspectJ и перехватывайте вызовы к различным разновидностям открытия файловых потоков.Используйте аспект вокруг.Обратите внимание, что это может сказать только то, какой объект открывает поток, но, очевидно, объект может передавать ссылки на поток, поэтому ...

...