บทความนี้ส่วนใหญ่ศึกษาเนื้อหาที่เกี่ยวข้องของ StackTraceElement เพื่อรับข้อมูลการโทรแบบสแต็กตามรายละเอียดและตัวอย่างมีดังนี้
StackTrace (Stack Track) เก็บข้อมูลเกี่ยวกับวิธีการเรียกใช้สแต็ก PrintStackTrace () ที่ใช้กันทั่วไปในการประมวลผลข้อยกเว้นคือการพิมพ์ข้อมูลสแต็กของการโทรยกเว้น
StackTraceElement แสดงถึงวัตถุวิธีการใน StackTrace (Stack Track) และคุณสมบัติของมันรวมถึงชื่อคลาสของวิธี, ชื่อวิธี, ชื่อไฟล์และจำนวนบรรทัดที่เรียกว่า
Public Final Class StackTraceElement ใช้ java.io.serializable {// โดยปกติเริ่มต้นโดย VM (ตัวสร้างสาธารณะที่เพิ่มใน 1.5) สตริงส่วนตัว declareclass; String MethodName ส่วนตัว; ชื่อไฟล์สตริงส่วนตัว;StackTraceElement ถูกกำหนดให้เป็นขั้นสุดท้ายซึ่งแสดงให้เห็นว่าไม่ได้รับอนุญาตให้สืบทอดเป็นคลาส Java Basic
มีสองวิธีในการรับ stacktraceelement ซึ่งทั้งสองอย่างกลับมา stacktracelement array ซึ่งเป็นข้อมูลของสแต็คนี้
1. thread.currentthread (). getStackTrace ()
2. ใหม่ throwable (). getStackTrace ()
Array StackTraceElement มีเนื้อหาของ StackTrace (Stack Track) โดยการสำรวจคุณสามารถรับกระบวนการโทรระหว่างวิธีการนั่นคือคุณสามารถรับวิธีการปัจจุบันและชื่อวิธีการของผู้โทรจำนวนสายการโทรและข้อมูลอื่น ๆ
การทดสอบคลาสสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {new testClass (). methoda ();} โมฆะส่วนตัววิธีการ () {system.out.println ("-----------------------------------"); methodb ();} โมฆะส่วนตัว Methodb () {System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {stackTraceElement stackTraceElement = องค์ประกอบ [i]; String className = stackTraceElement.getClassName (); String MethodName = StackTraceElement.getMetHodName (); String Filename = StackTraceLement.getFilename () Array Subscript i = "+i+", filename = "+filename+", className = "+className+", methodName = "+methodName+", linenumber = "+linenumber);}}}1. เราสามารถห่อหุ้มไลบรารีบันทึก เมื่อพิมพ์บันทึกเป้าหมายเรายังสามารถพิมพ์จำนวนบรรทัดที่บันทึกอยู่ผ่านสแต็กการโทรนี้ ด้วยวิธีนี้เราสามารถค้นหาสายเอาต์พุตบันทึกอย่างรวดเร็วและไม่ค้นหาทั่วโลกเพื่อค้นหาอีกต่อไป
โมฆะคงที่สาธารณะ D (แท็กสตริง, สตริงผงชูรส, วัตถุ ... พารามิเตอร์) {stackTraceElement TargetStackTraceElement = getTargetStackTraceElement (); log.d (tag, "(" + targetStackTraceElement.getFilename () + ":" + targetStackTraceElement.getLineNumber () + ")"); log.d (tag, string.format (msg, params));}2. ถ้าเราเขียน SDK และหวังว่าจะมีการเรียกใช้วิธีการบางอย่างในตำแหน่งที่แน่นอนเรายังสามารถตรวจสอบว่าวิธีนี้ถูกเรียกให้ดูว่าตำแหน่งการโทรของวิธีนี้ถูกต้องหรือไม่
ตัวอย่างเช่นมันจะต้องดำเนินการใน activity.onresume, pvsdk.onresume ดังนั้นเมื่อเราเรียกใช้วิธี pvsdk.onresume เราใช้วิธี pvsdk.onresume เพื่อตรวจจับว่าวิธีนี้เรียกว่าในกิจกรรม onresume โดยได้รับข้อมูลของสแต็ค
ระดับสาธารณะ PVSDK {โมฆะคงที่สาธารณะ onResume () {stackTraceElement [] stacktrace = thread.currentthread (). getStackTrace (); boolean result = false; สำหรับ (stacktracelement stacktracelement: stacktrace) stackTraceElement.getClassName (); ลอง {บูลีนที่กำหนดได้ fromClass = class.forName (className). isassignablefrom (activity.class); ถ้า (กำหนด fromclass && "onresume". equals (methodName)) runtimeException ("pvsdk.onresume ต้องอยู่ในกิจกรรม onresume");}}3. เมื่อเราทำการวิเคราะห์ซอร์สโค้ดหากเราต้องการวิเคราะห์กระบวนการดำเนินการของรหัสทั้งหมดเราสามารถรับข้อมูลจากสแต็กการพิมพ์ สิ่งนี้ค่อนข้างมีประโยชน์เมื่อวิเคราะห์ซอร์สโค้ด
ข้างต้นเป็น คำอธิบายโดยละเอียดทั้งหมดของบทความนี้เกี่ยวกับวิธีการเรียกใช้ข้อมูล stacktracelement ข้อมูลสแต็ก ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!