Frage

Szenario:

Es ist ein komplexes Stück Software, die von Hand starten ärgerlich. Was ich getan habe, ist ein Python-Skript zu erstellen, um die ausführbare Datei zu starten und befestigen gdb für das Debuggen.

Der Prozess Start-Skript:

  • sorgt für eine Umgebungsvariable gesetzt ist.
  • sorgt für ein lokales Build-Verzeichnis auf die LD_LIBRARY_PATH Variable Umgebung hinzugefügt wird.
  • ändert das aktuelle Arbeitsverzeichnis in dem die ausführbaren erwartet (nicht mein Design)
  • zu sein
  • startet die ausführbare Datei mit einer Config die einzige Befehlszeilenoption Datei
  • Rohre die Ausgabe von der ausführbaren Datei zu einem zweiten Protokollierungsprozess
  • erinnert PID ausführbarer, dann startet & gdb legt ausführbar ausgeführt wird.

Das Skript arbeitet, mit einer Einschränkung. Strg + c nicht die debugee unterbrechen und Kontrolle gdb zurück. Wenn ich also „weiter“ ohne aktive Haltepunkte kann ich nie wieder den Prozess stoppen, muss es von einer anderen Shell getötet / unterbrochen werden . BTW, läuft „kill es SIGINT “, wobei ist die Debuggee der pid tut mich zurück zu GDB prompt ... aber es ist wirklich ärgerlich, die Dinge so zu tun zu haben

Zuerst dachte ich, Python wurde packt das SIGINT Signal, aber das scheint nicht der Fall zu sein als I-Signal-Handler das Signal an die debugee weiterleiten einzurichten und dass das Problem nicht beheben.

ich verschiedene Konfigurationen auf den Python-Skript versucht habe (Aufruf os.spawn * statt subprocess, etc.) Es scheint, dass eine Möglichkeit, darüber zu gehen, wenn Python das Kind Prozess, SIGINT (ctrl-c) ins Leben gerufen Signale NICHT um sich an gDB oder den untergeordneten Prozess geleitet.

Aktuelle Linie des Denkens

  • Dies könnte zu benötigen eine Beziehung gesetzt werden getrennte Prozessgruppen-ID für die debugee & GDB ... jede Glaubwürdigkeit das?
  • Möglicher Fehler mit SELinux?

Info:

  • GDB 6.8
  • Python 2.5.2 (Problem vorhanden mit Python 2.6.1 als auch)
  • SELinux Environment (Bug-Signale an Prozesse liefern?)

Alternativen Ich habe in Betracht gezogen:

  • eine .gdbinit Datei Einrichten so viel zu tun, was das Skript tut, Umgebungsvariablen und aktuelles Arbeitsverzeichnis ein Problem mit diesem Ansatz sind.
  • Starten von ausführbaren und GDB Anbringen manuell (igitt)

Frage: Wie beurteilen Sie die Start / Debuggen von Großprojekten automatisieren?

Update: Ich habe unter Nicholas Riley Beispiele versucht, auf einem Macintosh zu Hause alle cntl-c arbeiten, um varrying Grad, auf den Produktions boxen lassen (was ich jetzt zu glauben laufen SELinux) sie dies nicht tun ...

War es hilfreich?

Lösung

Statt das Signal an die Debuggee von Python weiterzuleiten, können Sie versuchen, es einfach zu ignorieren. Folgende arbeitet für mich:

import signal
signal.signal(signal.SIGINT, signal.SIG_IGN)

import subprocess
cat = subprocess.Popen(['cat'])
subprocess.call(['gdb', '--pid=%d' % cat.pid])

Damit konnte ich ^ C wiederholt innerhalb GDB und unterbrechen den Debuggee ohne ein Problem, aber ich habe einige seltsame Verhalten sehen.

übrigens, ich hatte auch kein Problem, wenn das Signal an den Zielprozess weitergeleitet werden.

import subprocess
cat = subprocess.Popen(['cat'])

import signal, os
signal.signal(signal.SIGINT,
              lambda signum, frame: os.kill(cat.pid, signum))

subprocess.call(['gdb', '--pid=%d' % cat.pid])

Also, vielleicht etwas anderes in Ihrem Fall ist hier los? Es könnte helfen, wenn Sie einen Code geschrieben, der bricht.

Andere Tipps

Ihr Kommentar Notizen, die Sie mit Kitt sshing in bist ... hast du eine Steuerung tty haben? Mit OpenSSH würden Sie die Option -T hinzufügen, weiß ich nicht, wie / ob Kitt dies die Art und Weise tun, werden Sie es verwenden.

Auch:. Sie könnten versuchen, cygwin ssh statt Kitt mit

Wenn Sie bereits eine aktuelle Skript einrichten, dies zu tun, aber haben Probleme ein Teil davon zu automatisieren, vielleicht können Sie nur greifen erwarten und es verwenden, um das Setup zu liefern, dann fallen wieder in den interaktiven Modus in erwarten zu starten Prozess. Dann können Sie noch Ihr Strg-C zur Verfügung zu unterbrechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top