Esempio n. 1
0
        //------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Дамп записывается в файл с уникальным названием (FileName), 
        /// который будет храниться в той же директории, что и exe файл. 
        /// Перед тем как вызвать MiniDumpWriteDump, инициализируем структуру 
        /// типа MINIDUMP_EXCEPTION_INFORMATION.
        /// </summary>
        /// <param name="pathToDirectory">Путь к директории сохранения дампа</param>
        /// <param name="fileName">Возвращает имя созданого файла дампа</param>
        public static void CreateMiniDump(
            String pathToDirectory, 
            DUMP_TYPE typeOfDump, out String fileName)
        {
            using (System.Diagnostics.Process process = 
                System.Diagnostics.Process.GetCurrentProcess())
            {
                fileName = String.Format(@"CRASH_DUMP_{0}_{1}.dmp", 
                    DateTime.Today.ToShortDateString(), DateTime.Now.Ticks);

                String pathToDump = pathToDirectory + @"\" + fileName;

                MINIDUMP_EXCEPTION_INFORMATION Mdinfo = new MINIDUMP_EXCEPTION_INFORMATION();

                Mdinfo.ThreadId = GetCurrentThreadId();
                Mdinfo.ExceptionPointers = Marshal.GetExceptionPointers();
                Mdinfo.ClientPointers = 1;

                using (FileStream fs = new FileStream(pathToDump, FileMode.Create))
                {
                    switch (typeOfDump)
                    {
                        case DUMP_TYPE.MiniDumpFilterMemory:
                            {
                                throw new NotImplementedException();
                                //break; 
                            }
                        case DUMP_TYPE.MiniDumpFilterModulePaths:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpFilterTriage:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpIgnoreInaccessibleMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpNormal:
                            {
                                MiniDumpWriteDump(
                                    process.Handle,
                                    (uint)process.Id,
                                    fs.SafeFileHandle.DangerousGetHandle(),
                                    (Int32)DUMP_TYPE.MiniDumpNormal,
                                    ref Mdinfo,
                                    IntPtr.Zero,
                                    IntPtr.Zero);
                                break; 
                            }
                        case DUMP_TYPE.MiniDumpScanMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpValidTypeFlags:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithCodeSegs:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithDataSegs:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithFullAuxiliaryState:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithFullMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithFullMemoryInfo:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithHandleData:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithIndirectlyReferencedMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithModuleHeaders:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithoutAuxiliaryState:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithoutOptionalData:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithPrivateReadWriteMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithPrivateWriteCopyMemory:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithProcessThreadData:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithThreadInfo:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithTokenInformation:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        case DUMP_TYPE.MiniDumpWithUnloadedModules:
                            {
                                throw new NotImplementedException();
                                //break;
                            }
                        default:
                            { break; }
                    }                    
                }
            }
        }
Esempio n. 2
0
        //------------------------------------------------------------------------------------------------------
        /// <summary>
        /// Дамп записывается в файл с уникальным названием (FileName),
        /// который будет храниться в той же директории, что и exe файл.
        /// Перед тем как вызвать MiniDumpWriteDump, инициализируем структуру
        /// типа MINIDUMP_EXCEPTION_INFORMATION.
        /// </summary>
        /// <param name="pathToDirectory">Путь к директории сохранения дампа</param>
        /// <param name="fileName">Возвращает имя созданого файла дампа</param>
        public static void CreateMiniDump(
            String pathToDirectory,
            DUMP_TYPE typeOfDump, out String fileName)
        {
            using (System.Diagnostics.Process process =
                       System.Diagnostics.Process.GetCurrentProcess())
            {
                fileName = String.Format(@"CRASH_DUMP_{0}_{1}.dmp",
                                         DateTime.Today.ToShortDateString(), DateTime.Now.Ticks);

                String pathToDump = pathToDirectory + @"\" + fileName;

                MINIDUMP_EXCEPTION_INFORMATION Mdinfo = new MINIDUMP_EXCEPTION_INFORMATION();

                Mdinfo.ThreadId          = GetCurrentThreadId();
                Mdinfo.ExceptionPointers = Marshal.GetExceptionPointers();
                Mdinfo.ClientPointers    = 1;

                using (FileStream fs = new FileStream(pathToDump, FileMode.Create))
                {
                    switch (typeOfDump)
                    {
                    case DUMP_TYPE.MiniDumpFilterMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpFilterModulePaths:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpFilterTriage:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpIgnoreInaccessibleMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpNormal:
                    {
                        MiniDumpWriteDump(
                            process.Handle,
                            (uint)process.Id,
                            fs.SafeFileHandle.DangerousGetHandle(),
                            (Int32)DUMP_TYPE.MiniDumpNormal,
                            ref Mdinfo,
                            IntPtr.Zero,
                            IntPtr.Zero);
                        break;
                    }

                    case DUMP_TYPE.MiniDumpScanMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpValidTypeFlags:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithCodeSegs:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithDataSegs:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithFullAuxiliaryState:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithFullMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithFullMemoryInfo:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithHandleData:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithIndirectlyReferencedMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithModuleHeaders:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithoutAuxiliaryState:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithoutOptionalData:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithPrivateReadWriteMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithPrivateWriteCopyMemory:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithProcessThreadData:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithThreadInfo:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithTokenInformation:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    case DUMP_TYPE.MiniDumpWithUnloadedModules:
                    {
                        throw new NotImplementedException();
                        //break;
                    }

                    default:
                    { break; }
                    }
                }
            }
        }
Esempio n. 3
0
 static extern bool MiniDumpWriteDump(
     IntPtr hProcess, 
     uint ProcessId, 
     IntPtr hFile, 
     int DumpType, 
     ref MINIDUMP_EXCEPTION_INFORMATION ExceptionParam, 
     IntPtr UserStreamParam, 
     IntPtr CallbackParam);