Je développe une application (un service/démon, vraiment) sur Linux en C++ qui doit l'interface avec un morceau de matériel. Si mon programme ne libère pas les ressources pour ce matériel correctement lors de la terminaison, alors je dois recharger le pilote de périphérique, un processus qui prend environ 10 minutes et pour des raisons évidentes d'avoir à attendre 10 minutes entre chaque test du programme être frustrant.signaux lors du débogage
J'ai donc utilisé la fonction sigaction()
pour attraper un SIGINT (un ctrl-c) afin que mon programme puisse fermer proprement quand j'en ai fini avec. Lors de l'exécution du programme à partir de la console, cela fonctionne très bien. Cependant, lors du débogage dans Netbeans ou Eclipse (j'ai essayé les deux), les choses ne fonctionnent pas.
- Dans Eclipse, si je frappe ctrl-c dans la console il fournit, il ne semble pas enregistrer qu'un SIGINT jamais produit
- Dans Eclipse, si je lance le programme en mode débogage, puis utilisez
kill -SIGINT <pid>
, le programme se casse comme s'il touchait un point d'arrêt - Netbeans semble effectivement réaliser qu'un signal a été envoyé lorsque je clique sur ctrl-c dans la console, et ouvre une boîte de dialogue demandant si je veux le transférer à l'application . En cliquant sur "Forward and continue" semble juste casser le programme et le signal n'est pas reçu par l'application. Il dit aussi que je peux configurer ce genre de choses dans Debug -> Dbx configure, un élément de menu qui n'existe pas
- Dans NetBeans, si j'exécute le programme en mode debug et que j'utilise ensuite
kill -SIGINT <pid>
, le comportement est le même que ci-dessus - I On ajoute alors un gestionnaire d'SIGQUIT et essayé d'envoi que via
kill
lors du débogage dans Netbeans. Cette fois, aucune boîte de dialogue n'apparaît et le gestionnaire de signal n'est jamais déclenché.
J'ai besoin une certaine façon de éteindre correctement mon application alors que je suis le débogage. Des idées?
Alors, est-il possible de faire gdb gérer SIGINT judicieusement? Quel serait le contenu '.gdbinit' à faire? –