This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
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