2011-05-24 17 views
5

Estoy depurando (en Visual Studio 2008) una utilidad que he escrito en C++. Combinar archivos de entrada masivos con mi máquina lenta y puede llevar más de 6 horas llegar al punto en el que necesito ver la ejecución del programa en busca de irregularidades.guardando el estado del programa (visual studio 2008)

Probablemente estoy tomando cartas en el asunto, pero alguien está al tanto de la característica o complemento o algo dentro de Visual Studio o algo similar donde puedo guardar el estado de ejecución del programa para poder pasar el tiempo que lleva llegar a donde ¿necesitan ser?

+0

Espero que haya oído hablar de [Prueba unitaria] (http://en.wikipedia.org/wiki/Unit_testing)? – Xeo

+0

por supuesto. lidiar con casos de prueba autoimpuestos para probar la funcionalidad y 1.8 gigas de datos en vivo son dos bestias separadas – basil

Respuesta

5

No estoy seguro de las posibilidades dentro de Visual Studio para hacer tal cosa, pero si no puede encontrar nada, trataría de usar una máquina virtual y guardar el estado de la máquina. Probablemente será terriblemente lento, pero puede ayudar a la larga. Buena suerte

+1

Esta idea no es mala, creo que es lo más parecido a "guardar el estado del programa" como sea posible. – Xeo

-1

Lo que necesita es un conditional breakpoint ... ver este URL para más detalles:

http://msdn.microsoft.com/en-us/library/7sye83ce%28v=VS.90%29.aspx

La idea es que usted sabe lo que son verdaderas condiciones para el punto de corte para convertirse en válido, entonces cuando esas condiciones son verdaderas se disparará el punto de interrupción, pausando la ejecución. A continuación, puede venir por la mañana y comenzar a recorrer el código.

Si tiene DO tiene un punto exacto que desea causar un descanso en el que puede poner en un punto de corte programático DebugBreak() que provocará una excepción de punto de interrupción. El depurador de Visual Studio lo detectará y pausará la ejecución en ese punto.

Alternativamente, habilite gflags ejecute el programa con ADPlus y en el punto del código que cree que ha causado el problema, ejecute una excepción que no se maneja. Deje que el programa falle y ADPlus generará un volcado completo de la memoria de proceso. El hecho de que haya activado gflags significa que obtendrá asignaciones de memoria con bordes agradables a su alrededor (0xCDCDCDCD por lo general) para una fácil depuración.

Por último, también puede usar el DbgHelp.dlllibrary de Microsoft para generar un mini volcado que puede capturar varios niveles de información mediante programación (sin un bloqueo como lo implica la solución anterior). La función que desea es MiniDumpWriteDump. Puede escribir un mini-volcado normal o un volcado total de memoria usando los parámetros. Esto debería hacerse desde un proceso separado si es posible (puede esperar el control en su propio proceso).

+0

eso es básicamente lo que estoy haciendo en este momento. Comience la ejecución a altas horas de la noche, revíselo cuando llegue a la oficina. vuelva a comenzar, espere y haga otras cosas, vuelva a verificar al final del día, luego enciéndalo y vuelva a acceder a distancia en su casa para verificar y repetir el proceso. – basil

+2

Existe un ligero inconveniente, aunque los puntos de interrupción de la condición ralentizan la ejecución en un orden de magnitud, por lo que esas 6 horas pueden convertirse en 24. Si tiene un punto en particular en el código que desea adjuntar al alcanzar una condición, entonces creo que es es mejor poner un bucle 'while (true) sleep(); 'para que pueda entrar con el depurador cuando entre por la mañana –

+0

@basil si TIENE un punto exacto que desea causar un romper puede poner en un punto de salto programático 'DebugBreak()' que provocará una excepción de punto de ruptura.El depurador de Visual Studio lo detectará y pausará la ejecución en ese punto. – Dennis

Cuestiones relacionadas