Ich benutze gdbserver um einen entfernten Prozess zu debuggen. Ich bin in der Lage, gdbserver an den Prozess nach dem Start anhängen und wartet auf die Eingabe.Wie kann ich gdbserver beim Start an einen Prozess anhängen?
Ich möchte jedoch gdbserver an den Prozess anfügen, während es gestartet wird. Der Prozess wird über ein Shell-Skript gestartet und ich kann nicht ändern, wie dieser Prozess gestartet wird. Ich kann das Shell-Skript nicht ändern, um den Prozess über einen Aufruf von gdbserver zu starten.
Wie füge ich gdbserver an diesen Prozess an, sobald er gestartet wird?
Edit: Ich kann eine Warteschleife am Anfang von main()
erstellen. Zum Beispiel, die eine Schleife wartet, bis es eine Datei an einer vorbestimmten Stelle findet:
#include <unistd.h>
int main() {
while(access("/home/username/CONTINUE", F_OK) == -1)
sleep(1);
/*
...all the rest of main()
*/
return 0;
}
Wir legen gdbserver können, während der Prozess mit dieser Schleife besetzt ist, Haltepunkte zu setzen je nach Bedarf und sagen touch /home/username/CONTINUE
die Schleife zu verlassen. Dies erfordert jedoch, dass wir auf den Quellcode zugreifen, die Binärdatei kompilieren und auf dem Zielcomputer platzieren können. Ich suche einen besseren, einfacheren Weg als diesen.
Ich glaube, du denkst _zu kompliziert_ :-D. Schau dir meine Antwort an. – user0042
Können Sie Systemtap auf dem Remote-System ausführen? Wenn dies der Fall ist, können Sie Tom Tromeys [preattach] (https://github.com/tromey/gdb-helpers/blob/master/gdbhelpers/preattach.stp) ausführen, um den neuen Prozess zu stoppen, sobald er gestartet wird Sie müssen jeden Quellcode ändern. –