是否可以为使用ptrace/gdb停止的进程获取内核回溯?

是否可以为使用ptrace/gdb停止的进程获取内核回溯?,gdb,ptrace,backtrace,libunwind,Gdb,Ptrace,Backtrace,Libunwind,我在Linux上使用ptrace(2)和libunwind从正在运行的进程中采样用户级堆栈,效果很好。但是,如果我尝试查看/proc//stack中的内核级堆栈,我总是会看到以下内容: [<0>] ptrace_stop+0x155/0x270 [<0>] get_signal+0x49e/0x730 [<0>] do_signal+0x34/0x6d0 [<0>] exit_to_usermode_loop+0x82/0xf0 [<0>

我在Linux上使用
ptrace(2)
libunwind
从正在运行的进程中采样用户级堆栈,效果很好。但是,如果我尝试查看
/proc//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_停止+0x155/0x270
[]获取信号+0x49e/0x730
[]do_信号+0x34/0x6d0
[]退出到用户模式循环+0x82/0xf0
[]执行系统调用64+0x1a3/0x1b0
[]在帧+0x44/0xa9之后输入系统调用
[]0xFFFFFFFFFFFFFF
也就是说,进程的当前内核级堆栈位于
ptrace\u stop()
,而不是它以前所做的(以及我感兴趣的内容)

有没有办法避免这种情况并读取由
ptrace(2)
停止的进程的原始内核级堆栈?对于附加到调试器的进程,我观察到了相同的行为,例如,
gdb
,因此我假设解决方案是相同的