From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 112545 invoked by alias); 20 Feb 2017 10:26:53 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 112525 invoked by uid 89); 20 Feb 2017 10:26:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.0 required=5.0 tests=BAYES_40,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=print-stack, printstack, lastkey, source.py X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 20 Feb 2017 10:26:42 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6649E3B708; Mon, 20 Feb 2017 10:26:42 +0000 (UTC) Received: from [10.36.116.213] (ovpn-116-213.ams2.redhat.com [10.36.116.213]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1KAQekf005592; Mon, 20 Feb 2017 05:26:40 -0500 Subject: Re: Default value for option "python print-stack" To: Simon Marchi , Maxim Akhmedov References: <97321487117014@webcorp03e.yandex-team.ru> <5528d675aa4c171442a7c8b1aba9c135@polymtl.ca> From: Phil Muldoon Cc: gdb@sourceware.org Message-ID: Date: Mon, 20 Feb 2017 10:26:00 -0000 MIME-Version: 1.0 In-Reply-To: <5528d675aa4c171442a7c8b1aba9c135@polymtl.ca> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00042.txt.bz2 On 18/02/17 15:00, Simon Marchi wrote: > On 2017-02-14 19:03, Maxim Akhmedov wrote: >> Hi, >> >> Currently the default value for an option "python print-stack" is "message" >> that enables show only the messages of Python exceptions, but not their >> tracebacks nor line numbers. >> >> Though, usually the message of a Python error itself is pretty useless as it >> doesn't point you where exactly the error happened. Like, suppose you have a >> pretty-printer written in Python, and then you get the following output: >> >> (gdb) yp lastKey >> Python Exception local variable >> 'value_data' referenced before assignment: >> Error occurred in Python command: local variable 'value_data' referenced before >> assignment >> >> it doesn't really tell you anything, there may be lots of usages of a mentioned >> variable, and due to the dynamic nature of Python you may easily mess somewhere >> and it's particularly hard to find out the exact place by this message. Also, >> the exception message is duplicated. >> >> I see two options here. >> First one is choosing "full" as a default value for this option. Is their any >> rationale for not doing that? Python tracebacks are usually not that large to >> intentionally suppress them. >> Second one is appending the sourcefile:lineno to the message. Like: >> "/path/to/source.py:123". I believe it should be possible to extract this >> information from the traceback object you get after invoking the Python code. >> >> From my point of view, it's a good idea to implement both of this options. > > I agree with the first one, I spent so much time tracking bugs in my Python code before knowing about this setting. > > Simon Originally, the message only approach was chosen because Python pretty-printed values that caused exceptions in backtraces would often generate large amounts of Python exceptions that totally messed up the backtrace. This is always the case when the pretty-printed values are not initialised. I have no strong position on message or stack-trace; I prefer the former because there was thought put into the reasoning. Just as a note, you can set the exception printing parameter, as well as any other GDB parameter, in the user .gdbinit. I've often mulled, and I think I brought up once, a review of GDB default values (like set print pretty on, for example). This will generate some disagreements to this list, though! ;) Cheers Phil