Ich bin neu in waf und zu versuchen, ein Analogon zu einer GNU machen Trick zu implementieren ich oft verwenden:Kann ich einen interaktiven Befehl ausführen?
gdb: application.elf
gdb -x gdbinit-debug $<
Das heißt, erlauben ‚gdb machen‘ eine interaktive GDB-Sitzung für das Debuggen zu starten.
Ich habe eine GDB-Aufgabe für waf geschrieben, eine Funktion, die es verwendet, und es an einen Befehl der obersten Ebene angehängt. Aber ich sehe keine der I/O von GDB. Es läuft, laut ps
, aber ich schein nicht mitspielen zu dürfen.
Gibt es eine Möglichkeit, dies in Waf geschehen zu lassen?
Edit: Hier ist der relevante Teil des Skripts, denke ich:
class gdb_task(Task):
def run(self):
cmd = [ self.env.GDB, '--silent', '--batch' ]
for script in self.inputs[:-1]:
cmd.extend(['-x', script.abspath()])
cmd.append(self.inputs[-1].abspath())
return self.exec_command(cmd)
color = 'CYAN'
def runnable_status(self):
return RUN_ME
def keyword(self):
return 'GDB'
def __str__(self):
node = self.inputs[-1]
return node.path_from(node.ctx.launch_node())
Es funktioniert gut, aber wenn ich die --batch
ausziehen, es hängt nur ohne Ausgabe bei der Ausführung.
Konnten Sie waf wscript nachstellen, das das Problem reproduziert? Dieser Python-Einzeiler funktioniert für mich: 'python -c 'import subprocess; subprocess.call (["gdb", "a.out"]) '. ' – ks1322
Ich bin fast sicher, dass waf subprocess.call nicht verwendet; Ich denke, es muss die I/O-Streams verbrauchen. –