コールスタックを取得するためのJava呼び出しキーチェーントラッキング技術(V)

まず、コールスタック

呼び出しチェーンを監視することは、単純に、前述のように、呼び出しシーケンスを得るのに十分ではありません。

左は右の順序の順序を反映し、コールスタック情報を反映しているだけ。

第二に、コールスタックを取得

次のようにJavaでコールスタックを取得します:

Thread.currentThread().getStackTrace()
复制代码

コード例:

public class Man {

	public static void main(String[] args) {
		Man man = new Man();
		man.getup();
		man.brushTeeth();
		man.eat();
	}

	public void getup() {
		System.out.println("getup");
	}

	public void brushTeeth() {
		System.out.println("brush teeth");
	}

	public void eat() {
		StackTraceElement[] elements = Thread.currentThread().getStackTrace();
		for (int i = 0; i < elements.length; i++) {
			StringBuffer buffer = new StringBuffer();
			buffer.append("index: ").append(i).append(" ClassName: ").append(elements[i].getClassName())
					.append(" Method Name : " + elements[i].getMethodName());
			System.out.println(buffer.toString());
		}
		System.out.println("eat");
	}
}
复制代码

出力:

getup
brush teeth
index: 0 ClassName: java.lang.Thread Method Name : getStackTrace
index: 1 ClassName: com.javashizhan.demo.Man Method Name : eat
index: 2 ClassName: com.javashizhan.demo.Man Method Name : main
eat
复制代码

私たちは、スタックの最初の三つのメソッド呼び出しが食べることがわかります。

第三に、注意を払います

実際のコードでそれに注意してください。

  1. 必ずしも第3積層体は、他の親の方法が存在することになる春に呼び出すように、方法の現在の方法の父親であり、この数は3よりも大きいです。
  2. クラスとメソッド名は、必ずしも対応する親は、最近のコールチェーン上のメソッドと同じ名前を探してください見つけるため正確な方法ではありませんによるので、いくつかの方法中に1つの呼び出しは、同じ名前の複数のメソッドにつながるサイクルを呼び出すことができます。

終わり。


マイクロチャンネル公共数:


「Javaスタック戦闘大隊」知識の惑星の追加、議論に参加し、より実用的なコードを共有し、ないりんごの数キログラム、いくつかの小道具の栄光はあなたのために!

t.zsxq.com/RNzfi2j

おすすめ

転載: juejin.im/post/5d48562b518825673a6ae37f