Я могу использовать GDB для отладки рабочего процесса?

В соответствии с Linux, я могу использовать GDB для отладки процесса, который в настоящее время работает?

106
задан Justin Ethier 22 February 2010 в 03:39
поделиться

5 ответов

Да. Используйте команду attach. Посмотрите эту ссылку для получения дополнительной информации. Набрав help attach в консоли GDB, вы получите следующее:

(gdb) help attach

Присоединение к процессу или файлу вне GDB. Эта команда присоединяется к другой цели, того же типа, что и предыдущая "target" ("info files" покажет стек вашей цели). Команда может принимать в качестве аргумента идентификатор процесса, имя процесса (с необязательным суффиксом process-id) или файл устройства. Для идентификатора процесса вы должны иметь разрешение на отправку ему сигнала, и он должен иметь тот же эффективный uid, что и отладчик. При использовании команды "attach" к существующему процессу, отладчик находит программу, запущенную в процессе. программу, запущенную в этом процессе, сначала в текущем рабочем каталоге, или (если там не найдено) используя путь поиска исходного файла (см. команду "directory"). Вы также можете использовать команду "file" для указания программы и загрузки ее таблицы символов.


ПРИМЕЧАНИЕ: У вас могут возникнуть трудности с присоединением к процессу из-за улучшенной безопасности в ядре Linux - например, присоединение к дочернему процессу одной оболочки из другой.

Скорее всего, вам потребуется установить /proc/sys/kernel/yama/ptrace_scope в зависимости от ваших требований. Во многих системах сейчас по умолчанию установлено значение 1 или выше.

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.
83
ответ дан 24 November 2019 в 03:49
поделиться

Вы можете присоединиться к запущенному процессу с помощью gdb -p PID.

105
ответ дан 24 November 2019 в 03:49
поделиться

Команда для использования - gdb attach pid где pid - идентификатор процесса, к которому вы хотите присоединиться.

14
ответ дан 24 November 2019 в 03:49
поделиться

Да, можно. Предположим, что процесс foo запущен ...

ps -elf | grep foo

look for the PID number

gdb -a {PID number}
3
ответ дан 24 November 2019 в 03:49
поделиться

Да. Вы можете:

gdb program_name program_pid

Ярлык будет (при условии, что запущен только один экземпляр):

gdb program_name `pidof program_name`
23
ответ дан 24 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: