Ich habe ein Python-Programm, das im Hintergrund läuft. Was ich zum Debuggen wissen muss, ist, welche Anrufe es seriell, über das Netzwerk und an die Standardausgabe sendet und empfängt.
Ich weiß, dass ich den Parameter „-e write“ brauche, wenn ich stdout sehen will, aber was ist mit den anderen? Und ich brauche ihn, um alle drei mit einem einzigen Befehl auszugeben, da es Teil einer Konsolenanwendung sein wird, die ich erstelle.
Antwort1
Im Allgemeinen würden Sie zunächst strace
ohne ausführen (eventuell mit einem kleineren/leichteren Programm mit ähnlichen Vorgängen) und den Stderr in eine Datei umleiten. Dann werfen Sie einen Blick in die Datei, um den Mindestsatz an Optionen auszuwählen, den Sie benötigen.-e
-e
In Ihrem speziellen Fall habe ich es bei einem Aufruf ausgeführt wget
(nur nach Netzwerkkram suchen) und bin zu dem Schluss gekommen, dass diese Optionen nützlich wären: -e socket,connect,close,write,read
(löschen, read
wenn Sie an der Empfangsseite nicht interessiert sind).
Mit diesen Optionen strace
werden für die Netzwerkanrufe folgende Dinge angezeigt:
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