strace를 사용하여 네트워크 및 직렬 호출을 받으려면 어떻게 해야 합니까?

strace를 사용하여 네트워크 및 직렬 호출을 받으려면 어떻게 해야 합니까?

백그라운드에서 실행되는 Python 프로그램이 있습니다. 디버깅 목적을 위해 알아야 할 것은 직렬, 네트워크 및 stdout에 대해 어떤 호출을 보내고 받는지 확인해야 한다는 것입니다.

stdout을 보려면 "-e write" 매개변수가 필요하다는 것을 알고 있지만 다른 매개변수는 어떻습니까? 그리고 이는 제가 만들고 있는 콘솔 앱의 일부가 될 것이기 때문에 단일 명령으로 3개 모두를 출력해야 합니다.

답변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

관련 정보