Можно ли получить обратную трассировку ядра для процесса, остановленного с помощью ptrace / gdb? - PullRequest
1 голос
/ 16 марта 2020

Я использую ptrace(2) и libunwind на Linux для выборки стеков на уровне пользователя из запущенного процесса, который работает хорошо. Однако, если я пытаюсь посмотреть на стек уровня ядра в /proc/<pid>/stack, я всегда вижу следующее:

[<0>] ptrace_stop+0x155/0x270
[<0>] get_signal+0x49e/0x730
[<0>] do_signal+0x34/0x6d0
[<0>] exit_to_usermode_loop+0x82/0xf0
[<0>] do_syscall_64+0x1a3/0x1b0
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[<0>] 0xffffffffffffffff

То есть текущий стек уровня ядра для процесса находится в ptrace_stop(), не то, что он делал раньше (и что меня интересует).

Есть ли способ избежать этого и прочитать исходный стек уровня ядра процесса, остановленного ptrace(2)? Я наблюдаю то же поведение для процессов, подключенных к отладчику, например, gdb, поэтому я предполагаю, что решение будет таким же.

...