K běžícímu procesu se můžete připojit pomocí gdb -p PID
.
Ano. Použijte attach
příkaz. Další informace naleznete na tomto odkazu. Zadáním help attach
na konzoli GDB dává následující:
(gdb) help attach
Připojit k procesu nebo souboru mimo GDB. Tento příkaz se připojí k jinému cíli, stejného typu jako váš poslední"
target
"příkaz ("info files
" zobrazí váš cílový zásobník). Příkaz může mít jako argument ID procesu, název procesu (s volitelným ID procesu jako příponu) nebo soubor zařízení. Pro ID procesu musíte mít oprávnění odeslat zpracovat signál a musí mít stejné efektivní uid jako ladicí program. Při použití "attach
" k existujícímu procesu, debugger najde program spuštěný v procesu, nejprve se podívá do aktuálního pracovního adresáře, nebo (pokud tam není nalezen) pomocí vyhledávací cesty zdrojového souboru (viz "directory
"). Můžete také použít "file
" k určení programu a načtení jeho tabulky symbolů.
POZNÁMKA:Můžete mít potíže s připojením k procesu kvůli vylepšenému zabezpečení v jádře Linuxu – například připojení k potomkovi jednoho shellu z jiného.
Pravděpodobně budete muset nastavit /proc/sys/kernel/yama/ptrace_scope
v závislosti na vašich požadavcích. Mnoho systémů nyní standardně používá 1
nebo vyšší.
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.
Ano. Můžete:
gdb program_name program_pid
Zkratka by byla (za předpokladu, že běží pouze jedna instance):
gdb program_name `pidof program_name`