Raw Sockets vs. What?

I'm new to Python (1 week), but I'm writing an out-of-process debugger
for a Python ide. I tried execFile first, but stuff leaked over from
the wx libraries we are using. And, anyway, the next code set is PHP so
this has to be tackled anyway.

So, the question: How to communicate between two instances of the
python interpreter? Specifically, I need to pass the api and objects
from bdb, the base class for the debugger. One interpreter runs the
ide, the other the debugger and client code. We were talking and just
opening a socket and doing the rest from there came up. This, to me,
(admitedly a java guy) seems like a lot of work. If it were just
setting breakppoints and stepping, well ok. But I also want to have
introspection on the debugger side objects.

I could use raw sockets and write a bunch of stuff.

Does anyone have a suggestion about some pythonesque way to tackle
this?

Advertisements

> So, the question: How to communicate between two instances of the
> python interpreter? Specifically, I need to pass the api and objects
> from bdb, the base class for the debugger. One interpreter runs the
> ide, the other the debugger and client code. We were talking and just
> opening a socket and doing the rest from there came up. This, to me,
> (admitedly a java guy) seems like a lot of work. If it were just
> setting breakppoints and stepping, well ok. But I also want to have
> introspection on the debugger side objects.
>
> I could use raw sockets and write a bunch of stuff.
>
> Does anyone have a suggestion about some pythonesque way to tackle
> this?

I've found pyro useful for a similar task: I fork, create a pipe and in the
child I create a pyro daemon to run a remote object. The uri of that then
is passed using the pipe, so that the parent can get a reference to the
remote object.

I do the whole exercise due to not killable threads in python - so that I
can terminate the subprocess.

The nice thing about pyro is that it is like corba without the declartive
stuff - just use it.

You also migh check out the eric ide - it has an out-of-process debugger, so
Detlev must have found a solution
--
Regards,

Advertisements

"Matt" wrote:
> So, the question: How to communicate between two instances of the
> python interpreter? Specifically, I need to pass the api and objects
> from bdb, the base class for the debugger. One interpreter runs the
> ide, the other the debugger and client code. We were talking and just
> opening a socket and doing the rest from there came up. This, to me,
> (admitedly a java guy) seems like a lot of work. If it were just
> setting breakppoints and stepping, well ok. But I also want to have
> introspection on the debugger side objects.
>
> I could use raw sockets and write a bunch of stuff.
>
> Does anyone have a suggestion about some pythonesque way to tackle
> this?

let the debugger listen to a randomly chosen local port, let the client wrapper
connect back to the debugger via that port, and use a suitable marshalling layer
to wrap commands and data for the introspection part. This has been done many
times by many IDE developers (including yours truly). Designing the "RPC API"
is the only tricky part here, and it doesn't have to be that tricky (some people
are known to use really simply stuff, such as XML-RPC, for this purpose).

Unless I'm completely mistaken, recent versions of IDLE have a remote debugger
designed and implemented by GvR himself. Maybe you could use that code right
out of the box?

Just thought I'd follow up to say that I'm using XML-RPC after all. Not
that I was intimidated when I finally learned that Fredrik had written
the thing. No, it was more the issue that we want to write a php
debugger next and XML-RPC plays well with php, too.
Thanks again,
--Matt

Share This Page

Welcome to The Coding Forums!

Welcome to the Coding Forums, the place to chat about anything related to programming and coding languages.

Please join our friendly community by clicking the button below - it only takes a few seconds and is totally free. You'll be able to ask questions about coding or chat with the community and help others.
Sign up now!