由于我需要查找的原因,C++ 应用程序似乎卡在了 Docker 容器中。
我做了一个docker exec -it a_template_cpp bash
并进入了它。
我知道top
和pmap
命令,并且知道我可以在链接时生成一个地图文件来帮助我。
但我不知道哪些 Linux 命令可以显示我所询问的程序当前正在执行的地址。此时程序计数器寄存器的值是多少。
我应该执行什么命令才能知道它?
由于我需要查找的原因,C++ 应用程序似乎卡在了 Docker 容器中。
我做了一个docker exec -it a_template_cpp bash
并进入了它。
我知道top
和pmap
命令,并且知道我可以在链接时生成一个地图文件来帮助我。
但我不知道哪些 Linux 命令可以显示我所询问的程序当前正在执行的地址。此时程序计数器寄存器的值是多少。
我应该执行什么命令才能知道它?
实际上,查看某个进程当前正在做什么的唯一方法是使用调试器附加到该进程上。
/proc/<pid>/stat
如果您对某个进程拥有足够的权限ptrace
(严格来说,PTRACE_MODE_ATTACH_FSCREDS
和PTRACE_MODE_NOAUDIT
),以前可以在的第 30 个字段中看到该进程的指令指针:这仍然记录在
man 5 proc
或man 5 proc_pid_stat
中但它已被禁用一段时间,除非该过程正在转储核心。