Ejemplo n.º 1
0
        static bool CollectReportInfo(string filename, string symPath, ref sReportInfo info)
        {
            bool res = false;
            info.ResetReportInfo();

            res = ExtractFromFileData(filename, out info.acnt_uid, out info.login_id, out info.user_uid, out info.nickname, out info.version, out info.uservoice);
            if (res == false)
            {
                Console.WriteLine("ExtractFromFileData() failed");
                return false;
            }

            res = ExtractFromFilename(filename, out info.ipaddr, out info.date);
            if (res == false)
            {
                Console.WriteLine("ExtractFromFilename() failed");
                return false;
            }

            info.signatrue = null;
            info.callstack = new List<sCallstack>();

            res = ExtractFromMinidump(filename, symPath, ref info.callstack, out info.signatrue);
            if (res == false)
            {
                Console.WriteLine("ExtractFromMinidump() failed: filename({0})", filename);
                // flow3r 2008.08.19 <> 미니덤프 추출 결과 상관없이 데이터베이스에 등록하자.
                // return -1;
            }

            return true;
        }
Ejemplo n.º 2
0
        static bool CollectReportInfo(string filename, string symPath, ref sReportInfo info)
        {
            bool res = false;

            info.ResetReportInfo();

            res = ExtractFromFileData(filename, out info.acnt_uid, out info.login_id, out info.user_uid, out info.nickname, out info.version, out info.uservoice);
            if (res == false)
            {
                Console.WriteLine("ExtractFromFileData() failed");
                return(false);
            }

            res = ExtractFromFilename(filename, out info.ipaddr, out info.date);
            if (res == false)
            {
                Console.WriteLine("ExtractFromFilename() failed");
                return(false);
            }

            info.signatrue = null;
            info.callstack = new List <sCallstack>();

            res = ExtractFromMinidump(filename, symPath, ref info.callstack, out info.signatrue);
            if (res == false)
            {
                Console.WriteLine("ExtractFromMinidump() failed: filename({0})", filename);
                // flow3r 2008.08.19 <> 미니덤프 추출 결과 상관없이 데이터베이스에 등록하자.
                // return -1;
            }

            return(true);
        }
Ejemplo n.º 3
0
        static bool InsertReport(int project_uid, string filename, string symPath, string connStr, ref string message)
        {
            int report_uid = 0;

            // 1. 수집된 파일 정보 등록
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                DB.InsertReportResult result = DB.Insert_Report_File(conn, filename, out report_uid);
                switch (result)
                {
                case DB.InsertReportResult.Error:
                    message = "DB.Insert_Filename failed!";
                    return(false);

                case DB.InsertReportResult.Exists:
                    return(true);

                case DB.InsertReportResult.Inserted:
                    // 계속 분석 시작
                    break;
                }
            }

            // 2.1. 콜스택 분석 및 기초 정보 추출
            sReportInfo info = new sReportInfo();

            if (CollectReportInfo(filename, symPath, ref info) == false)
            {
                message = "CollectReportInfo failed!";
                return(false);
            }

            // 2.2. 데이터베이스에 입력
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlTransaction tran = conn.BeginTransaction();

                int callstack_uid = 0;

                // 콜스택 로그를 등록한다. (오류 종류를 구분해서 중복 제거 및 통계 처리를 위해)
                if (info.signatrue != null)
                {
                    bool res = DB.Insert_Callstack(conn, ref tran, project_uid, info.signatrue, out callstack_uid);

                    if (res == false || callstack_uid == 0)
                    {
                        tran.Rollback();

                        message = "DB.Insert_Callstack failed!";
                        return(false);
                    }

                    foreach (sCallstack stack in info.callstack)
                    {
                        DB.Insert_Single_Step(conn, tran, callstack_uid, stack);
                    }
                }

                if (report_uid != 0)
                {
                    if (DB.Insert_Report_Info(conn, tran, report_uid, callstack_uid, info) == false)
                    {
                        tran.Rollback();

                        message = "DB.Insert_Report_Info failed!";
                        return(false);
                    }
                }

                tran.Commit();
            }

            return(true);
        }
Ejemplo n.º 4
0
        static bool InsertReport(int project_uid, string filename, string symPath, string connStr, ref string message)
        {
            int report_uid = 0;

            // 1. 수집된 파일 정보 등록
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                DB.InsertReportResult result = DB.Insert_Report_File(conn, filename, out report_uid);
                switch  (result)
                {
                    case DB.InsertReportResult.Error:
                        message = "DB.Insert_Filename failed!";
                        return false;

                    case DB.InsertReportResult.Exists:
                        return true;

                    case DB.InsertReportResult.Inserted:
                        // 계속 분석 시작
                        break;
                }

            }

            // 2.1. 콜스택 분석 및 기초 정보 추출
            sReportInfo info = new sReportInfo();
            if (CollectReportInfo(filename, symPath, ref info) == false)
            {
                message = "CollectReportInfo failed!";
                return false;
            }

            // 2.2. 데이터베이스에 입력
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlTransaction tran = conn.BeginTransaction();

                int callstack_uid = 0;

                // 콜스택 로그를 등록한다. (오류 종류를 구분해서 중복 제거 및 통계 처리를 위해)
                if (info.signatrue != null)
                {
                    bool res = DB.Insert_Callstack(conn, ref tran, project_uid, info.signatrue, out callstack_uid);

                    if (res == false || callstack_uid == 0)
                    {
                        tran.Rollback();

                        message = "DB.Insert_Callstack failed!";
                        return false;
                    }

                    foreach (sCallstack stack in info.callstack)
                    {
                        DB.Insert_Single_Step(conn, tran, callstack_uid, stack);
                    }
                }

                if (report_uid != 0)
                {
                    if (DB.Insert_Report_Info(conn, tran, report_uid, callstack_uid, info) == false)
                    {
                        tran.Rollback();

                        message = "DB.Insert_Report_Info failed!";
                        return false;
                    }
                }

                tran.Commit();
            }

            return true;
        }