0

不必要に複雑なソース コードを学習しようとしています。method があり、インスタンス化されpublic void passObject(SomeObject someObject)たクラスを知りたいですsomeObject。問題は、呼び出し階層を上にたどると、分岐係数が非常に大きくなることです。たとえば、3 つのメソッドは を通過できsomeObjectpassObjectこれら 3 つのメソッドの前の 3 つのメソッドはそれぞれ同じオブジェクトを渡すことができます。

次のように挿入できる方法はありますかpassObject:

public void passObject(SomeObject someObject) {
    whereDidThisComeFrom(someObject); // Should print the class (perhaps) where someObject was instantiated.
    //
    //do the other stuff that passObject is supposed to do.
}

私は使用しますEclipse

4

2 に答える 2

3

最も簡単で汚い方法は、 のコンストラクターを入れ(new Exception("test")).printStackTrace()SomeObjectコードを実行することです。SomeObjectインスタンス化されるたびに、スタック トレースがコンソールに出力されます。

Eclipse はコンストラクターのブレークポイントもサポートしているため、ブレークポイントを設定してデバッグできます。

于 2014-03-21T09:19:42.843 に答える
2

確かに、'Show Call Hierachy' を使用すると、結果が多すぎて実行フローのアイデアが得られないことがあります。

代わりに、デバッグ モードで Eclipse を使用してみて、passObject(SomeObject someObject). その後、現在のスタック トレースが表示されます。スタック トレースのコードを調べることで、実際に発生した呼び出し階層を特定できます。

または、デバッグできない場合は、別の行を追加しpassObject(SomeObject someObject)て現在のスタック トレースを出力できますか? 詳しくはこちらをご覧ください。

于 2014-03-21T09:10:29.347 に答える