Pregunta

En una máquina cliente (WinXP SP2) a la que no tengo acceso, tengo un Win32 EXE (no administrado C ++) que se estrella en el arranque. Creo que la mejor manera de solucionar esto es para obtener una (mini) volcar y analizarlo más tarde con windbg o similar.

Ahora, lo que normalmente le diría al cliente para instalar las herramientas de depuración para Windows y ejecutar

cscript adplus.vbs -crash

Sin embargo, parece que no se puede utilizar para aplicaciones que adplus accidente en el arranque ( http: //support.microsoft.com/kb/q286350/ dice que "no utilizar ADPlus en las siguientes situaciones: Si tiene que solucionar problemas de un programa o proceso que se cierra inesperadamente durante el inicio"). El mismo artículo dice "Modo Proceso uso del usuario Dump", pero no se pudo instalar con éxito.

Cualquier idea de cómo obtener un volcado de un proceso que se estrella en el arranque en Win32?

¿Fue útil?

Solución

Puede instalar WinDBG en la máquina cliente y luego usar " Opciones de ejecución de archivos de imágenes " y establecen WinDBG a abrir una vez que el proceso ha comenzado. A continuación, ejecute el proceso de estrellarse y WinDBG se abrirá inmediatamente. presione g (Ir) y esperar a que el proceso se bloquee a continuación, escriba " .dump / MFH dumpFileName.dmp ". Ahora usted tiene archivo de volcado que puede depurar.

Otros consejos

Alternativamente, puede configurar su propio marco de generación de volcado que crea automáticamente un volcado de proceso cuando se encuentra cualquier excepción no controlada. Esto evitaría tener que instalar clientes WinDbg.

Uso SetUnhandledExceptionFilter Win32 API para registrar el manejador de excepciones de nivel de aplicación en la aplicación puesta en marcha. La función de devolución de llamada registrada se llama cada vez que hay alguna excepción que no se maneja. U puede entonces crear el volcado de proceso usando MiniDumpWriteDump api de Dbghelp.dll.

Código de ejemplo: -

LONG WINAPI My_UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
    HANDLE hFile = CreateFile("FileName",
            GENERIC_WRITE,
            0,
            NULL,
            CREATE_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

    MINIDUMP_EXCEPTION_INFORMATION aMiniDumpInfo;
    aMiniDumpInfo.ThreadId = GetCurrentThreadId();
    aMiniDumpInfo.ExceptionPointers = ExceptionInfo;
    aMiniDumpInfo.ClientPointers = TRUE;

    MiniDumpWriteDump(GetCurrentProcess(),
            GetCurrentProcessId(),
            hFile,
            (MINIDUMP_TYPE) (MiniDumpWithFullMemory|MiniDumpWithHandleData),
            &aMiniDumpInfo,
            NULL,
            NULL);

    CloseHandle(hFile);

    return EXCEPTION_EXECUTE_HANDLER;
}


int main(int argc, char* argv[])
{
    SetUnhandledExceptionFilter(&My_UnhandledExceptionFilter);

    // User code throwing exception..

    return 0; 
}

NB: - El filtro de excepción registrada no se llama cuando el proceso se está depurando. Así que durante la depuración si se pone punto de interrupción en la función de filtro de excepción No se sorprenda si no golpea, incluso después de causar una excepción no controlada.

Esta es una buena manera de recoger Vista SP1 se bloquea:

http://msdn.microsoft.com/ en-us / library / bb787181 (VS.85) .aspx

No hay necesidad de instalar nada en la máquina!

Instalación de herramientas de desarrollo en una máquina cliente sería mi último recurso, debo admitir que me gusta la idea, especialmente cuando hay alternativas que van a trabajar para usted.

En primer lugar inscribirse para Winqual . Ahora vamos a obtener acceso a los volcados y otro error de sus clientes de forma automática. Por lo que recuerdo que este es un servicio gratuito, no hay razón para no usarlo.

Desde Winqual es probable que tome un tiempo para el volcado de bloqueo para llegar a usted, y siempre es agradable ser un poco más sensible a los clientes sobre todo cuando se bloquea la aplicación, utilice Dr. Watson . Por lo que recuerdo cuando se produce el accidente, antes de hacer clic en el cuadro de diálogo puede ejecutar drwatsn32 desde Inicio> Ejecutar o la línea de comandos y el Dr. Watson aparecerá. En este punto se desestima el diálogo de error va a generar un archivo de volcado. Si esto falla, instale el Dr. Watson ejecutando con el -i parámetro en la línea de comandos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top