투케이2K

592. (Android/Java) [유틸 파일] getProcessStack : 프로그램 수행 스택 목록 확인 본문

Android

592. (Android/Java) [유틸 파일] getProcessStack : 프로그램 수행 스택 목록 확인

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

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

 

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

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


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


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

            // [현재 프로그램 실행 중 쌓인 스택 개수 확인]
            int stack_size = Thread.currentThread().getStackTrace().length;

            StackTraceElement stackTraceElement[] = Thread.currentThread().getStackTrace();
            String now_code = String.valueOf(stackTraceElement[3].toString());


            // [출력 스택 개수 변경]
            if (stack_size >= MAX_STACK){
                stack_size = MAX_STACK;
            }
            
            
            // [for 문을 수행하면서 수행된 클래스 확인]
            int count = 1;
            for (int i=0; i<=stack_size; i++){
                try {
                    if (stackTraceElement[i].toString().contains(packgeName) == true){


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


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

                        count ++;
                    }
                }
                catch (Exception e){}
            }

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


        // [로그 출력]
        //*
        // ===============================================================
        S_Log._D_("프로그램 수행 스택 목록 확인", new String[]{
                "RETURN :: " + String.valueOf(returnData)
        });
        // ===============================================================
        // */


        // [리턴 반환]
        return returnData;
    }

 

반응형
Comments