GNU/Linux >> Znalost Linux >  >> Linux

Mohu použít GDB k ladění běžícího procesu?

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`

Linux
  1. Změnit prostředí běžícího procesu?

  2. Můžete použít kotvy ^ $ s Ls?

  3. Můžeme použít C kód v Pythonu?

  1. Mohu používat Homebrew na Ubuntu?

  2. Jak mohu znát absolutní cestu běžícího procesu?

  3. Mohu používat APT na TinyCore?

  1. Jak ladit programy C v Linuxu pomocí gdb

  2. Ujistěte se, že proces vždy běží?

  3. Jak mohu získat čas nástěnných hodin běžícího procesu?