elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  consulta sobre Funciones de manejo de errores [c++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: consulta sobre Funciones de manejo de errores [c++]  (Leído 7,178 veces)
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: consulta sobre Funciones de manejo de errores [c++]
« Respuesta #10 en: 11 Octubre 2011, 06:24 am »

también puede hacer algo como esto, agregas esta función:

Código
  1. typedef enum _MINIDUMP_TYPE {
  2.  MiniDumpNormal                           = 0x00000000,
  3.  MiniDumpWithDataSegs                     = 0x00000001,
  4.  MiniDumpWithFullMemory                   = 0x00000002,
  5.  MiniDumpWithHandleData                   = 0x00000004,
  6.  MiniDumpFilterMemory                     = 0x00000008,
  7.  MiniDumpScanMemory                       = 0x00000010,
  8.  MiniDumpWithUnloadedModules              = 0x00000020,
  9.  MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
  10.  MiniDumpFilterModulePaths                = 0x00000080,
  11.  MiniDumpWithProcessThreadData            = 0x00000100,
  12.  MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
  13.  MiniDumpWithoutOptionalData              = 0x00000400,
  14.  MiniDumpWithFullMemoryInfo               = 0x00000800,
  15.  MiniDumpWithThreadInfo                   = 0x00001000,
  16.  MiniDumpWithCodeSegs                     = 0x00002000,
  17.  MiniDumpWithoutAuxiliaryState            = 0x00004000,
  18.  MiniDumpWithFullAuxiliaryState           = 0x00008000,
  19.  MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
  20.  MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
  21.  MiniDumpWithTokenInformation             = 0x00040000
  22. } MINIDUMP_TYPE;
  23.  
  24. typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
  25.  DWORD               ThreadId;
  26.  PEXCEPTION_POINTERS ExceptionPointers;
  27.  BOOL                ClientPointers;
  28. } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
  29.  
  30. typedef struct _MINIDUMP_USER_STREAM {
  31.  ULONG32 Type;
  32.  ULONG   BufferSize;
  33.  PVOID   Buffer;
  34. } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
  35.  
  36. typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
  37.  ULONG                 UserStreamCount;
  38.  PMINIDUMP_USER_STREAM UserStreamArray;
  39. } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
  40.  
  41. typedef struct _MINIDUMP_CALLBACK_INFORMATION {
  42.  PVOID CallbackRoutine;
  43.  PVOID CallbackParam;
  44. } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
  45.  
  46. typedef BOOL (WINAPI *MiniDumpWriteDump_t)(HANDLE, DWORD, HANDLE,MINIDUMP_TYPE,
  47.  CONST PMINIDUMP_EXCEPTION_INFORMATION,
  48.  CONST PMINIDUMP_USER_STREAM_INFORMATION,
  49.  CONST PMINIDUMP_CALLBACK_INFORMATION
  50. );
  51.  
  52. LONG WINAPI MiniDumper(struct _EXCEPTION_POINTERS *pExceptionInfo){
  53.  LONG retval=EXCEPTION_CONTINUE_SEARCH;
  54.  HMODULE hDll=LoadLibrary("dbghelp.dll");
  55.  if(hDll){
  56.    MiniDumpWriteDump_t MiniDumpWriteDump=(MiniDumpWriteDump_t)
  57.    GetProcAddress(hDll,"MiniDumpWriteDump"));
  58.    if(MiniDumpWriteDump){
  59.      char szDumpPath[MAX_PATH];SYSTEMTIME sSystemTime;
  60.      if(GetModuleFileName(NULL,szDumpPath,MAX_PATH)){
  61.        char *pSlash=strrchr(szDumpPath,'\\');
  62.        if(pSlash)*++pSlash=0;
  63.      }else
  64.        GetTempPath(MAX_PATH,szDumpPath);
  65.      GetLocalTime(&sSystemTime);
  66.      sprintf(szDumpPath,"%s%s_%02i_%02i_%04i__%02i_%02i_%02i.mdmp",szDumpPath,"MyProcess",sSystemTime.wDay,sSystemTime.wMonth,sSystemTime.wYear,sSystemTime.wHour,sSystemTime.wMinute,sSystemTime.wSecond);
  67.      HANDLE hFile=CreateFile(szDumpPath,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
  68.      if(hFile!=INVALID_HANDLE_VALUE){
  69.        MINIDUMP_EXCEPTION_INFORMATION ExInfo;
  70.        ExInfo.ThreadId=GetCurrentThreadId();
  71.        ExInfo.ExceptionPointers=pExceptionInfo;
  72.        ExInfo.ClientPointers=FALSE
  73.        if(MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hFile,MiniDumpNormal,&ExInfo,NULL,NULL))
  74.          retval=EXCEPTION_EXECUTE_HANDLER;
  75.        CloseHandle(hFile);
  76.      }
  77.    }
  78.  }
  79.  return retval;
  80. }

y luego al principio de tu programa agregas:

Código
  1. SetUnhandledExceptionFilter(MiniDumper);

de esa forma cuando ocurra un error se generará un archivo que contendrá información del mismo (el cual lo puedes analizar con Windbg)...

S2


« Última modificación: 11 Octubre 2011, 06:33 am por Karman » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
consulta sobre generador de funciones con eeprom
Electrónica
gallet 0 3,069 Último mensaje 5 Abril 2006, 15:55 pm
por gallet
Ingenieria de Software en le Manejo de Errores
Programación General
cyberserver 2 4,079 Último mensaje 24 Diciembre 2010, 05:58 am
por 1mpuls0
Consulta sobre manejo de memoria en Linux
GNU/Linux
jos3 1 3,429 Último mensaje 22 Febrero 2011, 05:55 am
por Foxy Rider
[Consulta] Prototipos de funciones para include.
ASM
The Swash 3 3,806 Último mensaje 3 Junio 2012, 06:20 am
por The Swash
Consulta sobre retorno en las funciones
Programación C/C++
NicoSanhueza 3 2,534 Último mensaje 26 Junio 2018, 17:49 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines