Signale beim Debuggen
Entwickle ich eine Anwendung (ein Dienst/daemon, wirklich) auf Linux in C++, muss die Schnittstelle mit einem Stück hardware. Wenn mein Programm nicht lassen Sie die Mittel für dieses Stück hardware sauber bei der Kündigung, dann muss ich neu laden der Gerätetreiber, ein Prozess, der dauert etwa 10 Minuten und aus offensichtlichen Gründen zu müssen, warten Sie 10 Minuten zwischen jeder test des Programms wäre frustrierend.
So, ich habe das sigaction()
Funktion zum abfangen einer SIGINT (Strg-c), so dass mein Programm kann sauber Herunterfahren, wenn ich fertig bin mit ihm. Beim ausführen des Programms aus der Konsole, diese funktioniert einwandfrei. Allerdings, wenn das Debuggen in Netbeans oder Eclipse (ich habe beides ausprobiert) Dinge, die nicht funktionieren.
- In Eclipse, wenn ich mit Strg-c in der Konsole, Sie bietet es scheint nicht zu registrieren, dass ein SIGINT jemals aufgetreten
- In Eclipse, wenn ich das Programm im debug-Modus, und verwenden Sie dann
kill -SIGINT <pid>
, das Programm bricht als wenn es einen Haltepunkt erreicht - Netbeans scheint tatsächlich so zu realisieren, ein signal wurde gesendet, wenn ich mit Strg-c in der Konsole, und öffnet sich ein Dialogfenster gefragt, ob ich will leitet es an die Anwendung. Klick auf die "weiter und weiter" scheint nur zu brechen, das Programm und das signal nicht empfangen wird, durch die Anwendung. Er sagt auch, ich kann konfigurieren dieses Zeug im Debug -> Dbx konfigurieren, ein Menüpunkt, der nicht existiert
- In Netbeans, wenn ich das Programm im debug-Modus, und verwenden Sie dann
kill -SIGINT <pid>
, das Verhalten ist das gleiche wie oben - Ich dann noch ein SIGQUIT-handler und versucht, den Versand, die über
kill
beim Debuggen in Netbeans. Dieser Zeit, wird kein Dialogfeld angezeigt und die signal-handler wird nie ausgelöst.
Brauche ich einige Weg, um sauber Herunterfahren meine app während ich das Debuggen. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, das problem hatte nichts zu tun mit Netbeans oder Eclipse, sondern eher gdb.
gdb kann konfiguriert werden, um den Umgang mit Signalen in eine Vielzahl von Möglichkeiten. Wenn Sie ausführen:
gdb
geben:
info signals
Erhalten Sie eine Liste der Signale und gdb-Aktionen, was zu tun ist, wenn er empfängt das signal:
etc...
Meine temporären arbeiten, um zu verwenden SIGALRM die gdb standardmäßig nicht brechen und senden an den Prozess. Sie können jedoch auch so anpassen, dass der Standard-gdb-Einstellungen durch erstellen einer .gdbinit-Datei, wo Sie können diese
.gdbinit
Inhalt zu tun?Sogar dieser post ist alt, hoffe, es kann anderen helfen.
Um zu verhindern, dass Eclipse-vom Fang über die Tastenkombination Strg+C können Sie Ihren gdb verwenden .gbdinit-Datei.
Erstellen Sie eine .gdinit mit diesem Inhalt
In Ihrer eclipse-Konfiguration können Sie definieren, wo ist dein .gdbinit-Datei zu verwenden, die in Ihrem Debug-Konfiguration
Einfache Lösung.. Versuchen Sie es mit DEBUG-Makros für die Abwicklung Ihrer situation.
Außerdem können Sie versuchen zu bereinigen Ihre app, bevor Sie verlassen.