使用strace,如何使用它來獲取網路和串行調用

使用strace,如何使用它來獲取網路和串行調用

我有一個在後台運行的Python程序,我需要知道調試目的是我需要查看什麼調用它發送和接收串行、網絡和標準輸出。

我知道如果我想查看stdout,我需要“-e write”參數,但是其他的呢?我需要它從一個命令輸出所有三個,因為它將成為我正在製作的控制台應用程式的一部分。

答案1

一般來說,您首先會運行strace-e最終在具有類似操作的更小/更輕的程式上)並將stderr重定向到一個文件,然後查看文件內部以選擇-e您需要的最小選項集。

對於您的特定情況,我在呼叫中運行了它wget(僅查找網路內容),並且我確定這些選項會有用:(如果您對接收方不感興趣,-e socket,connect,close,write,read請刪除)。read

透過這些選項,strace可以顯示網路呼叫的類似內容:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("74.125.202.121")}, 16) = 0
write(4, "\26\3\1\0\302\1\0\0\276\3\1\374\2\223/\332\3545\34\2628u3-3hT\25s\"\310\215"..., 199) = 199
read(4, "\26\3\1\0]", 5)                = 5
read(4, "\2\0\0Y\3\1U\251X\245#\313\3544a\17\372\276\340^%\177y\270asQ\255^\7B\212"..., 93) = 93
...
close(4)                                = 0

相關內容