57

我知道strace用来ptrace做这项工作,

但它需要运行目标进程TRACE_ME

这不适用于已经运行的进程的情况。

它如何在已经运行的进程上工作?

4

2 回答 2

44

strace -p <PID> ----> 将进程附加到strace。“-p”选项用于进程的PID

strace -e trace=read,write -p <PID>--> 通过这种方式,您还可以跟踪事件的进程/程序,例如读取和写入(在此示例中)。所以在这里它将打印所有此类事件,包括进程的读取和写入系统调用。

其他此类示例

-e trace= network  (Trace all the network related system calls.)

-e trace=signal    (Trace all signal related system calls.)

-e trace=ipc       (Trace all IPC related system calls.)

-e trace=desc      (Trace all file descriptor related system calls.)

-e trace=memory    (Trace all memory mapping related system calls.)

还有很多..

trace是您可以与-e选项一起使用的众多选项之一。

Ctrl-C以中止 strace 的跟踪。

通过键入 和手册页来查看帮助部分以获取有关strace的简要摘要以获取详细信息。strace -h

注意:跟踪的进程运行缓慢。

于 2014-02-28T10:44:07.230 回答
26

的详细信息ptrace()是特定于操作系统的。

ptrace(PTRACE_TRACEME, ...)在 Linux 上,孩子可以使用;请求被其父母追踪。但是,或者,一个进程可以将自己附加到另一个进程ptrace(PTRACE_ATTACH, ...)

请参阅Linuxptrace(2)手册页(如果您真的想要详细信息,请参阅strace源代码和从 开始的内核源代码kernel/ptrace.c)。

于 2011-09-23T22:53:14.167 回答