Puoi collegarti a un processo in esecuzione con gdb -p PID .
Sì. Usa il attach comando. Dai un'occhiata a questo link per ulteriori informazioni. Digitando help attach su una console GDB dà quanto segue:
(gdb) help attachAllega a un processo o file al di fuori di GDB.Questo comando si collega a un altro target, dello stesso tipo dell'ultimo"
target" comando ("info files" mostrerà il tuo stack di destinazione). Il comando può prendere come argomento un id di processo, un nome di processo (con un id di processo facoltativo come suffisso) o un file di dispositivo. Per un id di processo, devi avere il permesso di inviare il elaborare un segnale e deve avere lo stesso uid effettivo del debugger. Quando si utilizza "attach" a un processo esistente, il debugger trova il programma in esecuzione nel processo, cercando prima nella directory di lavoro corrente o (se non lo trova) utilizzando il percorso di ricerca del file di origine (vedere il "directory"). Puoi anche usare il comando "file" comando per specificare il programma e per caricare la sua tabella dei simboli.
NOTA:potresti avere difficoltà a collegarti a un processo a causa della maggiore sicurezza nel kernel di Linux, ad esempio collegandoti al figlio di una shell da un'altra.
Probabilmente dovrai impostare /proc/sys/kernel/yama/ptrace_scope a seconda delle vostre esigenze. Molti sistemi ora hanno come impostazione predefinita 1 o superiore.
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.
Sì. Puoi fare:
gdb program_name program_pid
Una scorciatoia potrebbe essere (supponendo che sia in esecuzione solo un'istanza):
gdb program_name `pidof program_name`