Sie können mit gdb -p PID an einen laufenden Prozess anhängen .
Ja. Verwenden Sie die attach Befehl. Unter diesem Link finden Sie weitere Informationen. Geben Sie help attach ein an einer GDB-Konsole ergibt folgendes:
(gdb) help attachAn einen Prozess oder eine Datei außerhalb von GDB anhängen. Dieser Befehl wird an ein anderes Ziel angehängt, vom gleichen Typ wie Ihr letzter"
target" Befehl ("info files" zeigt Ihren Zielstapel). Der Befehl kann als Argument eine Prozess-ID, einen Prozessnamen (mit einer optionalen Prozess-ID als Suffix) oder eine Gerätedatei annehmen. Für eine Prozess-ID müssen Sie die Berechtigung haben, die zu senden ein Signal verarbeiten, und es muss die gleiche effektive UID wie der Debugger haben. Bei Verwendung von "attach" zu einem bestehenden Prozess hinzufügt, findet der Debugger das im Prozess laufende Programm, indem er zuerst im aktuellen Arbeitsverzeichnis sucht oder (falls dort nicht gefunden) den Quelldatei-Suchpfad verwendet (siehe "directory" Befehl). Sie können auch den Befehl "file" Befehl, um das Programm zu spezifizieren und seine Symboltabelle zu laden.
HINWEIS:Aufgrund der verbesserten Sicherheit im Linux-Kernel können Sie Schwierigkeiten beim Anhängen an einen Prozess haben - zum Beispiel beim Anhängen an das untergeordnete Element einer Shell von einer anderen.
Wahrscheinlich müssen Sie /proc/sys/kernel/yama/ptrace_scope einstellen je nach Ihren Anforderungen. Viele Systeme verwenden jetzt standardmäßig 1 oder höher.
The sysctl settings (writable only with CAP_SYS_PTRACE) are:
0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other
process running under the same uid, as long as it is dumpable (i.e.
did not transition uids, start privileged, or have called
prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is
unchanged.
1 - restricted ptrace: a process must have a predefined relationship
with the inferior it wants to call PTRACE_ATTACH on. By default,
this relationship is that of only its descendants when the above
classic criteria is also met. To change the relationship, an
inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare
an allowed debugger PID to call PTRACE_ATTACH on the inferior.
Using PTRACE_TRACEME is unchanged.
2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace
with PTRACE_ATTACH, or through children calling PTRACE_TRACEME.
3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
PTRACE_TRACEME. Once set, this sysctl value cannot be changed.
Ja. Sie können Folgendes tun:
gdb program_name program_pid
Eine Abkürzung wäre (vorausgesetzt, nur eine Instanz läuft):
gdb program_name `pidof program_name`