有时我需要从终端运行应用程序进行调试。如果我确定错误会在启动应用程序后不久发生,我可以从终端运行此应用程序。
然而,错误总是出乎意料地发生,这时我只需要从终端监视有缺陷的应用程序(查看其输出)。
那么我可以从终端中选择一个未使用终端启动的应用程序吗?如果可以,该怎么做?
答案1
Linux 中的每个进程都有一个特殊目录/proc/{pid}/fd/
。0 是 stdin,1 是 stdout,2 是 stderr。因此,假设您只对诊断输出感兴趣,您可以确定进程 pid,然后在终端中执行以下操作:
查看标准输出:
cat /proc/{pid of process}/fd/1
查看 stderr:
cat /proc/{pid of process}/fd/2
答案2
或者你可以使用strace
像这样
sudo strace -p $pid_of_the_process
答案3
您可以附加gdb
到正在运行的进程。
语法是
gdb program pid
好的,如果删除了调试信息(这是已部署应用程序的默认设置),您将无法看到源代码。但您可能可以看到 stdout/stderr 和调试器消息、段错误。
答案4
您可能正在寻找retty
。您也可以查找“attach tty”。基本上它已经完成了,ptrace
因此您甚至可以自己动手。