This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Discrepancy between Python and Guile wrt exiting the interpreter


On 2020-01-19 11:40 a.m., Eli Zaretskii wrote:
>> From: Simon Marchi <simark@simark.ca>
>> Date: Sun, 19 Jan 2020 11:07:14 -0500
>>
>> I looked into it, but didn't find a way to exit the Python interpreter and
>> come back in GDB by typing a Python command.  That command would somehow
>> have to fool the Python interpreter in thinking that its input stream, which
>> we pass here:
>>
>> https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/python/python.c;h=d6f7f99c457300cba8e6dbe590ac15b4b2e2b110;hb=HEAD#l302
>>
>> has reached EOF.
> 
> Ctrl-d does that, but it is not a command.
> 
> Is there any reason why quit() exits from GDB as well?  Doesn't the
> Python interpreter support invocation from some other 'main' program?
> It's strange.

Yes, it does (we use it).  It's just the way it works.  From [1]:

    Read and execute statements from a file associated with an interactive device
    until EOF is reached.

The quit() and exit() functions are aliases of the same thing.  They raise a
"SystemExit" exception.  According to the SystemExit exception [2]:

    When it is not handled, the Python interpreter exits; no stack traceback is printed.

When using the various PyRun_Interactive* functions, it seems like the interpreter is
catching the SystemExit exception and calling the C exit() function before returning
to our code, so we don't have a chance to do handle it from the caller of
PyRun_Interactive* function.

[1] https://docs.python.org/3/c-api/veryhigh.html#c.PyRun_InteractiveLoopFlags
[2] https://docs.python.org/3/library/exceptions.html#SystemExit


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]