Usando strace, como usá-lo para obter a rede e as chamadas seriais

1

Eu tenho um programa python que é executado em segundo plano, o que preciso saber para fins de depuração é que preciso ver quais chamadas são enviadas e recebidas para serial, rede e stdout.

Eu sei que, se eu quiser ver o stdout, preciso do parâmetro "-e write", mas e os outros? E eu preciso disso para produzir todos os 3 deles a partir de um único comando, já que ele fará parte de um aplicativo de console que estou criando.

    
por user3346931 17.07.2015 / 15:38

1 resposta

1

Em geral, você executaria strace sem -e no começo (eventualmente em um programa menor / mais leve com operações similares) e redirecionaria o stderr para um arquivo, então espiar dentro do arquivo para selecionar o conjunto mínimo de -e opções de que você precisa.

Para o seu caso em particular, executei-o em uma invocação wget (procurando apenas coisas da rede) e determinei que essas opções seriam úteis: -e socket,connect,close,write,read (descarte read se você não estiver interessado no recebimento lado).

Com estas opções, strace mostra coisas como esta para as chamadas de rede:

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, "
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, "%pre%2%pre%%pre%643/24528u3-3hTs\"05"..., 199) = 199
read(4, "%pre%]", 5)                = 5
read(4, "%pre%%pre%YU1X5#344a260^%7y0asQ5^B2"..., 93) = 93
...
close(4)                                = 0
2%pre%%pre%643/24528u3-3hTs\"05"..., 199) = 199 read(4, "%pre%]", 5) = 5 read(4, "%pre%%pre%YU1X5#344a260^%7y0asQ5^B2"..., 93) = 93 ... close(4) = 0
    
por 17.07.2015 / 21:45