Я использую 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
, поэтому я предполагаю, что решение будет таким же.