2011-02-14 22 views
8

Necesito obtener un volcado de emergencia de un programa. ¿Como lo consigo? El programa está escrito en C#. ¿Qué es exactamente un volcado de emergencia? ¿Cuándo se crea? ¿Dónde se guarda? ¿Cómo lo leo?Cómo obtengo un volcado de emergencia

+5

¿SO? ¿Plataforma? ¿Idioma? –

+0

¿Quiere decir que necesita crear un volcado * cuando la aplicación falla *, o simplemente necesita tomar un volcado de memoria de una aplicación en ejecución? Porque los dos se logran de manera bastante diferente. –

+2

http://blogs.msdn.com/b/debugger/archive/2009/12/30/what-is-a-dump-and-how-do-i-create-one.aspx - ¡Bien explicado! –

Respuesta

21

Como dice C# Supongo que está utilizando la plataforma de Windows.

Un crashdump, o simplemente volcado, es la instantánea completa de la memoria y otra información relacionada del sistema de un proceso en un momento determinado. Los vertederos se pueden usar para depurar bloqueos de programas, bloqueos, pérdida de memoria y de recursos, y probablemente haya más problemas que no he enumerado aquí.

En el caso de bloqueos y bloqueos, la primera pieza de datos que desea obtener de un volcado de emergencia será la pila de llamadas. Esto indica el punto de un bloqueo o el punto en el que una operación se bloqueó y nunca regresó, por lo que el programa se sienta y no hace nada.

Para pérdidas de recursos, se pueden recopilar varios volcados de memoria de un proceso durante un período de tiempo y examinar para ver qué objetos en la memoria están creciendo más. Esto puede ayudar a reducir qué partes del código están causando la fuga. Para obtener más información sobre la depuración de problemas específicos, recomiendo this blog.

Hay algunas maneras de capturar un archivo de volcado.

  1. Procdump (http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx)
  2. Visual Studio 2010 (http://msdn.microsoft.com/en-us/library/vstudio/fk551230(v=vs.100).aspx)
  3. WinDBG - no está mal pero más intimidante que otras herramientas

Con procdump sólo tiene que hacer:

c:\>procdump.exe -ma YourProcessName.exe 

El resultado de este comando será una instantánea de memoria completa de YourProcessNa me.dmp escrito en c: \. El modificador -ma especifica el volcado de una imagen de memoria completa. Si está depurando un bloqueo o bloqueo, es probable que pueda escapar sin el modificador -ma. Tenga en cuenta que sin el volcado total de memoria cuando vaya a examinar estructuras de datos, probablemente no tenga datos válidos. Sin el volcado total de memoria, todavía tendrá datos de la pila de llamada que a menudo es lo suficientemente bueno para bloqueos y cuelgues. Por lo general, el error en el costado del espacio del disco duro es bajo, así que recopile todo el volcado.

Procdump también tomará volcados automáticamente en intervalos de tiempo o cuando se cumpla una condición específica. Lea la documentación en el enlace de arriba para más información. Un interruptor que recomendaría es -e.

c:\>procdump.exe -ma -e YourProcessName.exe 

En lugar de escribir el volcado inmediatamente, solo lo escribirá cuando se bloquee el programa.

Con Visual Studio 2010 puede adjuntar al proceso con el depurador y guardar un archivo de volcado. (Tenga en cuenta que cuando F5 depura su programa Visual Studio se adjunta automáticamente). Cuando su programa está en un "estado de corte" (punto de corte, excepción no controlada, bloqueo), el menú Debug tendrá la opción Save Dump As.... Entonces puedes guardar ese vertedero donde quieras.

Como mencionó C#, es muy probable que recopile archivos de volcado administrados. La forma más fácil es usar Visual Studio 2010. Simplemente, abra el archivo de volcado que creó como lo haría con cualquier otro archivo y comience a depurar.

Sin embargo, si no es una opción, siempre puede usar VS2008 o WinDbg con las extensiones SOS. Sin embargo, recomiendo Visual Studio 2010, ya que las extensiones SOS y WinDbg en general tienen una curva de aprendizaje bastante empinada. Para obtener más información acerca de SOS, consulte estos artículos de MSDN here y here.

Otra razón por la que recomiendo usar Visual Studio o procdump es que recopilarán el archivo de volcado que espera. Recomiendo apartarse de la herramienta "Crear archivo de volcado" del Administrador de tareas. La razón es que recogerá volcados de 64 bits de procesos de 32 bits que son demasiado difíciles de depurar.

1

También puede intentar usar WinDbg

http://www.windbg.org/

Una de volcado es cuando el contenido de la memoria RAM y ciertas partes del procesador se copian en un archivo. Este archivo se crea en el punto crítico de un error y se puede usar para depurar el problema.

Esto me ha funcionado en el pasado. Es un atajo de teclado para bloquear el volcado en Windows.

* Start Registry Editor. 
* Locate the following registry subkey: 
     o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\i8042prt\Parameters 
* On the Edit menu, click Add Value, and then add the following registry entry: 
     o Name: CrashOnCtrlScroll 
     Data Type: REG_DWORD 
     Value: 1 
* Exit Registry Editor and then restart the computer. 

http://vinaytechs.blogspot.com/2010/01/how-to-get-crash-or-hang-dump.html

+2

El CrashOnCtrlScrl es para forzar un volcado de bloqueo en modo kernel (pantalla azul de la muerte) en Windows. Si el OP usa C#, probablemente sea más de lo que quiere (aunque lo publicó antes de esa actualización). –

+0

Mejor que suficiente. – sleath

+0

Al determinar qué estaba haciendo el modo de usuario desde un volcado en modo kernel * es * posible; es mucho más trabajo de lo que me gustaría hacer si pudiera evitarlo. –

1

Lucas, un volcado de bloqueo es una bolsa entera de datos relacionados con el estado de su solicitud en el momento del accidente ha sucedido, para volcar que significa grabar todos los datos en algún lugar, por lo general en un archivo de texto.

un enfoque básico es registrar toda la pila cuando ocurre una excepción para que pueda investigar más tarde y ver qué método ha fallado y arrojar qué excepción, cuáles fueron los valores de los parámetros y demás. Esto no es realmente un basurero, pero ayuda mucho en muchos casos.

Había algo desarrollado recientemente por la EM sobre los volcados y bloqueos de aplicaciones, creo que estaba relacionado con Windows 7 realmente ...

ver aquí: Recuperación de aplicaciones y reiniciar

http://msdn.microsoft.com/en-us/library/cc948909(v=vs.85).aspx

2

en Windows XP, puede crear un archivo de volcado con esta utilidad:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e&displaylang=en

Navegar Una vez instalado en el directorio de instalación y funcionamiento

userdump PID 

desde la línea de comandos donde PID es el PID del proceso que desea obtener un volcado de bloqueo de (usted puede encontrar esto en el administrador de tareas, pero es posible necesita agregar la columna a la vista estándar).

Este archivo se puede abrir en Visual Studio; solo necesita asegurarse de tener los símbolos integrados.

En Windows 7 simplemente haga clic derecho en el proceso en el Administrador de tareas y seleccione "Crear archivo de volcado"

+6

Recomiendo NO utilizar el "Create Dump File" del Administrador de tareas. En el sistema de 64 bits crea volcados de 64 bits de procesos de 32 bits. Estos archivos de volcado son bastante inútiles a menos que solo desee usar WinDbg y las extensiones WOW64: http://msdn.microsoft.com/en-us/library/aa384163(VS.85).aspx. – Evan

2

Uso ADPlus. Viene con las herramientas de depuración para Windows. Creará carpetas de volcados de memoria debajo de su directorio principal. Puede analizarlos usando WinDbg luego.

Cuestiones relacionadas