From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58717 invoked by alias); 19 Jan 2020 17:01:37 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 58709 invoked by uid 89); 19 Jan 2020 17:01:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-5.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy=H*M:367f X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 19 Jan 2020 17:01:35 +0000 Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 3D3FC1E47D; Sun, 19 Jan 2020 12:01:34 -0500 (EST) Subject: Re: Discrepancy between Python and Guile wrt exiting the interpreter To: Eli Zaretskii Cc: gdb-patches@sourceware.org References: <83a76l10r6.fsf@gnu.org> <83tv4rxuut.fsf@gnu.org> From: Simon Marchi Message-ID: <7a3aa41f-367f-aa51-9b39-342874d9205e@simark.ca> Date: Sun, 19 Jan 2020 17:20:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <83tv4rxuut.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2020-01/txt/msg00589.txt.bz2 On 2020-01-19 11:40 a.m., Eli Zaretskii wrote: >> From: Simon Marchi >> 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