2011-01-07 5 views
1

Ich habe eine Python-Bibliothek, die ich versuche zu debuggen (pyzeroconf). Der folgende Code gibt '34' zurück, als ob die Daten über den Socket gesendet wurden, aber ich kann diese Pakete nicht auf zwei verschiedenen Wireshark-PCs sehen.Linux-Socket-Aufrufe verfolgen?

bytes_sent = self.socket.sendto(out.packet(), 0, (addr, port))

Ich bin an dem Punkt, wo ich brauche, um zu verstehen, was den Call-Stack vor sich geht nach unten. Gibt es eine Möglichkeit zu verfolgen, was passiert?

Auflösung: Das Problem wurde im Zusammenhang mit der "Bind-Adresse" die Bibliothek wurde als Standard herauszufinden. Ein Wert von "0.0.0.0" ist nicht erlaubt und schlägt (zumindest unter Linux) stillschweigend fehl.

Antwort

4

können Sie strace, z.

$ strace -o logfile -e trace=network cmdline 
1

Ich bin mir ziemlich sicher, dass dies nicht das, was man erwarten würde, aber helfen kann: strace -f -F Python myscript.py

Strace die Systemaufrufe eines generischen Programm auszugeben.

+0

Vielen Dank für Ihre Hilfe - meine Erwartung war etwas in der Nähe des tatsächlichen Systemaufrufs zu erkennen, aber ich kann nichts auf der Spur sehen. Ich verstehe nicht, warum kein Paket auf dem Draht auftaucht !! – jldupont

0

Warum sollte die INADDR_ANY-IP-Adresse fehlschlagen? Es sollte nicht. Aus meiner Sicht fehlt etwas anderes in Ihrem Bild. Was passiert, wenn Sie versuchen, außer dem Code-Block, verwenden (errno, string), um eine beschreibende Fehlermeldung zu erhalten.