Ich entwickle eine Anwendung (ein Dienst / Daemon, wirklich) unter Linux in C ++, die mit einer Hardware verbunden werden muss. Wenn mein Programm die Ressourcen für diesen Teil der Hardware beim Beenden nicht sauber freigibt, dann muss ich den Gerätetreiber neu laden, ein Vorgang, der ungefähr 10 Minuten dauert und aus offensichtlichen Gründen zwischen jedem Test des Programms 10 Minuten warten muss frustrierend sein.
Also habe ich die sigaction()
-Funktion benutzt, um ein SIGINT (ein ctrl-c) zu fangen, damit mein Programm sauber heruntergefahren werden kann, wenn ich damit fertig bin. Wenn das Programm von der Konsole aus ausgeführt wird, funktioniert das problemlos. Beim Debuggen in Netbeans oder Eclipse (ich habe beides versucht) funktionieren die Dinge jedoch nicht.
kill -SIGINT <pid>
verwende, bricht das Programm so ab, als würde es einen Haltepunkt treffen kill -SIGINT <pid>
verwende, verhält sich das Verhalten wie oben kill
beim Debuggen in Netbeans zu senden. Dieses Mal erscheint kein Dialog und der Signalhandler wird nie ausgelöst. Ich brauche einige Wege, um meine App während des Debuggens sauber herunterzufahren. Irgendwelche Ideen?
Es stellt sich heraus, dass das Problem nichts mit Netbeans oder Eclipse zu tun hat, sondern mit gdb.
gdb kann so konfiguriert werden, dass Signale auf verschiedene Arten verarbeitet werden können. Wenn Sie Folgendes ausführen:
gdb
Geben Sie dann Folgendes ein:
info signals
Sie erhalten eine Liste von Signalen und gdb-Aktionen, was zu tun ist, wenn dieses Signal empfangen wird:
%Vor%usw. ...
Meine temporäre Arbeit bestand darin, SIGALRM zu verwenden, das standardmäßig nicht bricht und an den Prozess sendet. Sie können die gdb-Standardeinstellungen jedoch auch anpassen, indem Sie eine .gdbinit-Datei erstellen, in der Sie diese festlegen können.
Auch dieser Beitrag ist alt, ich hoffe, er kann anderen helfen.
Um zu verhindern, dass Eclipse Strg + C abfängt, können Sie Ihren gdb mit der Datei .gbdinit konfigurieren. Sie erstellen ein .gdinit mit diesem Inhalt
%Vor%In Ihrer Eclipse-Konfiguration können Sie definieren, wo Ihre .gdbinit-Datei in Ihrer Debug-Konfiguration verwendet werden soll
Einfache Lösung .. Verwenden Sie DEBUG-Makros, um mit Ihrer Situation umzugehen.
%Vor%Sie können auch versuchen, Ihre App vor dem Beenden zu bereinigen.