straceを使用してネットワークとシリアルコールを取得するにはどうすればいいですか

straceを使用してネットワークとシリアルコールを取得するにはどうすればいいですか

バックグラウンドで実行される Python プログラムがあります。デバッグの目的で知っておく必要があるのは、シリアル、ネットワーク、および stdout に対して送受信される呼び出しを確認する必要があるということです。

stdout を表示するには、「-e write」パラメータが必要なのはわかっていますが、他のパラメータはどうでしょうか。また、作成中のコンソール アプリの一部となるため、1 つのコマンドから 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

関連情報