투케이2K

330. (kotlin/코틀린) [유틸 파일] getProcessStack : 프로그램 수행 스택 목록 확인 본문

Kotlin

330. (kotlin/코틀린) [유틸 파일] getProcessStack : 프로그램 수행 스택 목록 확인

투케이2K 2023. 7. 1. 13:41

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] getProcessStack : 프로그램 수행 스택 목록 확인
        // -----------------------------------------------------------------------------------------
        fun getProcessStack(mContext: Context): String {

            /**
             * // -----------------------------------------
             * [getProcessStack 메소드 설명]
             * // -----------------------------------------
             * 1. 프로그램 수행 스택 목록 확인
             * // -----------------------------------------
             * 2. 호출 방법 :
             *
             * C_Util.getProcessStack(A_Intro@this)
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 :
             *
             * [1] : com.example.kotlinproject.C_Util.getProcessStack(C_Util.java:5992)
             *
             * [2] : [NOW] : com.example.kotlinproject.A_Intro.onCreate(A_Intro.java:160)
             *
             * // -----------------------------------------
             */


            // [리턴 변수 선언]
            var returnData = ""
            val MAX_STACK = 20
            val packgeName = C_App.getMobilePackageName(mContext)


            // [로직 처리 실시]
            try {

                // [현재 프로그램 실행 중 쌓인 스택 개수 확인]
                var stack_size = Thread.currentThread().stackTrace.size
                val stackTraceElement = Thread.currentThread().stackTrace
                val now_code = stackTraceElement[3].toString()


                // [출력 스택 개수 변경]
                if (stack_size >= MAX_STACK) {
                    stack_size = MAX_STACK
                }


                // [for 문을 수행하면서 수행된 클래스 확인]
                var count = 1
                for (i in 0..stack_size) {
                    try {

                        if (stackTraceElement[i].toString().contains(packgeName) == true) {


                            var checkClass = ""
                            if (now_code.contains(stackTraceElement[i].toString()) == true) {
                                checkClass = "[NOW] : "
                            }


                            if (returnData != null && returnData.length > 0 && returnData.trim().equals("") == false){
                                returnData = returnData + "[" + count + "] : " + checkClass + stackTraceElement[i].toString() + "\n" + "\n"
                            }
                            else {
                                returnData = "\n" + "\n" + "[" + count + "] : " + checkClass + stackTraceElement[i].toString() + "\n" + "\n"
                            }

                            count++
                        }

                    } catch (e: Exception) {
                    }
                }

            } catch (e: Exception) {
                e.printStackTrace()
            }


            // [로그 출력]
            //*
            // ===============================================================
            S_Log._D_("프로그램 수행 스택 목록 확인", arrayOf(
                "RETURN :: $returnData"
            ))
            // ===============================================================
            // */


            // [리턴 반환]
            return returnData
        }

 

반응형
Comments