2012-03-15 8 views
4

特定のクラスをロードするClassLoaderを特定する方法はありますか?または、特定のクラスがロードされている場所からより具体的には?特定のクラスをロードするClassLoaderを見つける

古いdbドライバクラスがロードされている状況があります。私は、古いドライバがロードされている場所のファイルを探したいと思います。

私の最初のアプローチは、ClassLoader.loadClass(..)メソッドでデバッグポイントを設定し、クラスがロードされるとvmを停止して、どのクラスローダーがロードしているかを確認することです。残念なことに、loadClassメソッドは非常に頻繁に呼び出され、クラスがロードされる場所を停止するのが困難です。私はブレークポイントフィルターを設定しようとします。しかし、別の問題があります。ClassLoaderアーキテクチャのため、ClassLoaderがロードの責任を負いなくてもloadClassが呼び出されます。

私がしたいことを達成するには、より良い方法が必要です。解決策を探すためのアイデアや提案はありますか?

答えて

6

どのようにプログラムを起動しますか?

次のオプションをコマンドラインログに追加すると、読み込まれるすべてのクラスの場所にログが記録されます。

-verbose:class 

これらのログは、通常、sysoutに表示されます。しかし、ロギングがどのように構成されているかによって、少し見渡す必要があるかもしれません。

+0

素晴らしい答えです。両方の答えは素晴らしいですが、どちらを1つにするべきですか? – paweloque

+0

@ sgp15、実行時に特定のクラスを読み込むClassLoaderインスタンスをプログラムで取得する方法はありますか?ありがとう。 – suat

4
clazz.getProtectionDomain().getCodeSource().getLocation() 

明らかに! (5月NPE。)

は(ClassLoader sが複数の場所からクラスをロードすることができます。)

+0

すばらしい答え。両方の答えは素晴らしいですが、どちらを1つにするべきですか? – paweloque

0

また-verbose:javaコマンドのJNIオプションは、Javaで書かれていないロードされたクラスが表示されます、つまり「Javaのネイティブインタフェース"。

-dbednar

関連する問題