2010-04-12 3 views
7

Estoy intentando depurar un programa que inesperadamente se apaga. Cuando digo "se apaga", quiero decir que en un momento veo todas las ventanas que se muestran, cada una de las cuales muestra todos los datos correctos, y de repente todas las ventanas desaparecen. No hay ningún mensaje que informe algo incorrecto. Así que intenté ejecutar el programa en el depurador con la esperanza de que de alguna manera trampa lo estaba causando el programa para abortar, pero incluso dentro del depurador del programa simplemente termina abruptamente la última línea en el depurador es:.El programa finaliza abruptamente incluso en el depurador: ¿cómo sucedió eso?

The program '[5500] test.exe: Native' has exited with code 0 (0x0). 

Mi programa, que es extremadamente grande y extremadamente viejo, tiene muchos autodiagnósticos. Mi sospecha es que tal vez una autoprueba ha fallado y tal vez acabo de llamar a "exit()", olvidándome de abrir un cuadro de diálogo explicando por qué.

Mi que stion ahora es, ¿cómo puedo averiguar de qué punto en el código, mi programa se cerró?

+1

Una de las soluciones es buscar todo el código para las llamadas a funciones como exit() y colocar allí los puntos de corte. En realidad, si tiene llamadas para salir() sin abrir, es un signo de mal diseño: debe tener una función de envoltura que muestre un mensaje y luego llame a exit(). – sharptooth

Respuesta

4

La respuesta de Marcelo es genial. Si por alguna razón no puede romper en exit, instale una función (no toma argumentos, devuelve el vacío) con atexit y rompa dentro de eso.

5

Establezca un punto de interrupción en exit() y terminate() (quizás uno llame al otro, pero no estoy seguro).

+0

temrniate() llama a abort(), no a exit(). – sharptooth

+0

@Marcelo Cantos: dices "Establecer un punto de interrupción en la salida()" como si solo tuviera uno de ellos ... pero hay cientos. ¿Estás sugiriendo que de alguna manera ponga un breakpoint * dentro de * exit()? – Mick

+0

@Mick: en un depurador de línea de comandos, 'break exit' haría exactamente eso. – Potatoswatter

Cuestiones relacionadas