Embedded python: How to debug code in an isolated way

Eko palypse ekopalypse at gmail.com
Mon Aug 24 07:52:34 EDT 2020


Thank you very much for your interest in my little problem.

> When the app calls into python does the event loop of the gui block?

Yes, the cpp app calls a callback function from the embedded python
interpreter synchronously.


> When you print does that trigger the event loop to run in a nested call
back into the cpp?

I can't say for sure but I don't think so. At least my script or the
embedded interpreter doesn't do that.


>  Maybe you need to run python in its own thread and Marshall in and out
of the gui main thread with the event loop?

I've checked by using GetCurrentThreadId
<https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getcurrentthreadid>
that the registered callback function and debugger run in the same thread
but it is different to the UI thread.
Do you think I have to run the debugger in its own thread? I'll give it a
try anyways. :-)

Thx
Eren

Am So., 23. Aug. 2020 um 22:55 Uhr schrieb Barry <barry at barrys-emacs.org>:

>
>
> > On 22 Aug 2020, at 20:53, Eko palypse <ekopalypse at gmail.com> wrote:
> >
> > Hello,
> >
> > background info first. On windows, python3.8.5
> >
> > A cpp app has an embedded python interpreter which allows to
> modify/enhance the cpp app
> > by providing objects to manipulate the cpp app and callbacks to act on
> certain events,
> > like fileopen, fileclose, updateui ... which are send by the cpp app.
> > The embedded python interpreter acts more or less like the standard
> python REPL.
> > If you run a script with code like
> >
> > def test(i):
> >    print(i*2)
> >
> > test(4)
> >
> > then the test function is now globally available as long as the cpp app
> is alive.
> >
> > I've written a debugger based on bdb and encountered a situation which I
> haven't found out how to handle correctly yet.
> >
> > Let's assume I've registered a callback when something changes in the UI.
> > In that case an object function gets called which highlights certain
> aspects in the UI.
> >
> > Now if I run a script via this debugger it works as long as I don't use
> the same object function.
> > If I do use it, then the stack gets corrupted(?).
>
> When the app calls into python does the event loop of the gui block?
> When you print does that trigger the event loop to run in a nested call
> back into the cpp?
>
> Maybe you need to run python in its own thread and Marshall in and out of
> the gui main thread with the event loop?
>
> Barry
>
> > For example it look like this
> >
> > stack:
> > <frame at 0x00000000081AB420, file '...\\bdb.py', line 580, code run>,
> 580
> > <frame at 0x0000000004CDF550, file '<string>', line 1, code <module>>, 1
> > <frame at 0x0000000004CD6860, file '...\\test_pydebugger.py', line 8,
> code <module>>, 8
> >
> > now if I enter the function which call this object function this gets add
> >
> > <frame at 0x0000000004CEB040, file '\\test_pydebugger.py', line 5, code
> add_match>, 5
> >
> > I step through the code and suddenly the stack looks like this
> >
> > <frame at 0x00000000081AB420, file '...\\bdb.py', line 580, code run>,
> 580
> > <frame at 0x0000000004CDF550, file '<string>', line 1, code <module>>, 1
> > <frame at 0x0000000004CD6860, file '...\\test_pydebugger.py', line 8,
> code <module>>, 8
> > <frame at 0x0000000007396A40, file '...\\EnhanceAnyLexer.py', line 154,
> code <lambda>>, 154
> > <frame at 0x00000000081B35B0, file '...\\EnhanceAnyLexer.py', line 102,
> code paint_it>, 102)]
> >
> > EnhanceAnyLexer is neither part of the test_pydebugger script nor part
> of the debugger.
> > It is used to register a callback on the updateui event.
> >
> > So the question is, what do I need to read/learn/understand in order to
> solve this issue?
> > Or in other words, how can I debug my script in an isolated environment.
> > I can't manipulate the __main__.dict as this seems to have general
> impact on registered callbacks as well.
> > Any ideas?
> >
> > Thank you
> > Eren
> > --
> > https://mail.python.org/mailman/listinfo/python-list
> >
>
>


More information about the Python-list mailing list