strace -p 包含上下文/历史行数

strace -p 包含上下文/历史行数

我想要strace一个正在运行的进程,我知道我可以用它来做strace -p <pid>,但我相信该进程挂在了一些阻塞调用上,例如sem_wait()在从未发布的信号量上,等等,并且 的输出strace只有一行,例如:

Process 195 attached - interrupt to quit
poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}], 2, 3600000^C <unfinished ...>

是否可以指定strace输出更多行上下文/历史记录?我猜不是,因为我猜的strace是实时输出和每个函数/指令,但我想我会要求确认。

答案1

例如,您还可以使用 附加到进程gdb,并查看当前堆栈,这可能会有所帮助,特别是如果您使用调试符号编译了程序,您将获得更多信息。

例如,sleep在后台运行,获取其 pid 并使用 pid 和目标文件运行 gdb,然后给出bt回溯命令。要继续程序,请键入detach.

$ sleep 999 & 
[1] 17340
$ gdb -p 17340 /bin/sleep 
Reading symbols from /bin/sleep...(no debugging symbols found)...done.
Attaching to program: /usr/bin/sleep, process 17340
Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.24-8.fc23.x86_64
(gdb) bt
#0  0x00007fb84f43d510 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x0000562be81da29f in rpl_nanosleep ()
#2  0x0000562be81da100 in xnanosleep ()
#3  0x0000562be81d7a1d in main ()
(gdb) detach
Detaching from program: /usr/bin/sleep, process 17340
(gdb) quit

答案2

你是对的,没有历史记录。

如果不明显,输出显示进程正在调用poll,等待来自文件描述符 3 和 6 的输入。运行ls -l /proc/195/fd应该显示这些描述符连接到的内容。

相关内容