gdb - 是否可以为使用 ptrace/gdb 停止的进程获取内核回溯?
问题描述
我在 Linux 上使用ptrace(2)
andlibunwind
从正在运行的进程中采样用户级堆栈,效果很好。但是,如果我尝试查看内核级堆栈,/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
,所以我认为解决方案是相同的。
解决方案
推荐阅读
- python - Will Python 'rename' still attempt to rename a file if both inputs are the same?
- javascript - 从多个输入计数的 JS 函数
- python-3.x - HyperOpt multi metric evalution
- rocksdb - How to ensure consistent reads relative to rocksdb backup state
- reactjs - 如何检查赛普拉斯中的单选按钮。常规 check() 不起作用
- mysql - 如何在plesk中恢复mysql数据库?
- python - 无法将文件从linux服务器复制到本地机器
- chromium - 剧作家 - 单击按钮后无法获取更新的文本
- xsd - NLog:找不到架构信息
- javascript - 如何读取firestore上所有用户的所有嵌套集合?