Strace

帶有上下文/歷史行數的 strace -p

  • September 13, 2017

我想要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實時輸出和每個功能/指令,但我想我會要求確認。

你是對的,沒有可用的歷史記錄。

如果不明顯,輸出顯示程序正在poll呼叫中,等待來自文件描述符 3 和 6 的輸入。執行ls -l /proc/195/fd應該顯示這些描述符連接到什麼。

例如,您還可以使用 附加到程序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

引用自:https://unix.stackexchange.com/questions/391923