Estoy desarrollando una aplicación (un servicio/daemon, realmente) en Linux en C++ que necesita interconectarse con una pieza de hardware. Si mi programa no libera los recursos para esta pieza de hardware limpiamente al finalizar, entonces tengo que volver a cargar el controlador del dispositivo, un proceso que toma alrededor de 10 minutos y por razones obvias tener que esperar 10 minutos entre cada prueba del programa lo haría ser frustranteSeñales al depurar
Así que he utilizado la función sigaction()
para capturar un SIGINT (a ctrl-c) para que mi programa pueda cerrarse limpiamente cuando haya terminado con él. Cuando se ejecuta el programa desde la consola, funciona bien. Sin embargo, al depurar en Netbeans o Eclipse (he probado ambos), las cosas no funcionan.
- En Eclipse, si golpeo Ctrl-C en la consola que proporciona, no parece registrar que un SIGINT nunca ocurrió
- En Eclipse, si se me acaba el programa en modo de depuración y luego usar
kill -SIGINT <pid>
, el programa simplemente se rompe como si tocara un punto de interrupción - Netbeans parece darse cuenta de que se ha enviado una señal cuando presiono ctrl-c en la consola, y aparece un cuadro de diálogo preguntándome si quiero reenviarlo a la aplicación . Al hacer clic en "Adelante y continuar", parece que se rompe el programa y la aplicación no recibe la señal. También dice que puedo configurar esto en Debug -> Dbx configure, un elemento de menú que no existe
- En Netbeans, si ejecuto el programa en modo de depuración y luego uso
kill -SIGINT <pid>
, el comportamiento es el mismo que el anterior - Luego agregué un controlador SIGQUIT e intenté enviarlo a través del
kill
al depurar en Netbeans. Esta vez, no aparece ningún diálogo y el manejador de señal nunca se dispara.
necesito alguna manera de forma limpia apagado mi aplicación mientras estoy depuración. ¿Algunas ideas?
Entonces, ¿es posible hacer que gdb maneje SIGINT con sensatez? ¿Cuál sería el contenido de '.gdbinit' para hacerlo? –