From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21381 invoked by alias); 12 Jan 2015 21:00:08 -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 21369 invoked by uid 89); 12 Jan 2015 21:00:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: usevmg20.ericsson.net Received: from usevmg20.ericsson.net (HELO usevmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Mon, 12 Jan 2015 21:00:06 +0000 Received: from EUSAAHC001.ericsson.se (Unknown_Domain [147.117.188.75]) by usevmg20.ericsson.net (Symantec Mail Security) with SMTP id FC.61.03307.BB3E3B45; Mon, 12 Jan 2015 16:09:48 +0100 (CET) Received: from [142.133.110.232] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.77) with Microsoft SMTP Server id 14.3.195.1; Mon, 12 Jan 2015 16:00:03 -0500 Message-ID: <54B435D3.7000409@ericsson.com> Date: Mon, 12 Jan 2015 21:00:00 -0000 From: Simon Marchi User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python References: In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-01/txt/msg00318.txt.bz2 On 14-12-15 01:13 PM, Alexander Smundak wrote: > Python frame filters provide the ability to display non-native frames in > a mixed-language application (say, a backtrace of an application written > in C and embedding Java Virtual Machine can be displayed as a mix of > native frames and Java frames). However, GDB cannot always unwind > non-native frames. The proposed patch adds the ability to write frame > unwinders in Python. > > 2014-12-12 Sasha Smundak > > * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o. > (SUBDIR_PYTHON_SRCS): Add py-unwind.c. > (py-unwind.o): New recipe. > * NEWS: mention Python frame unwinding. > * data-directory/Makefile.in (PYTHON_FILE_LIST): Add sniffers.py. > * doc/python.texi (Writing a Frame Unwinder in Python): Add > section. > * python/py-objfile.c (objfile_object): Add frame_sniffers field. > (objfpy_dealloc): Decrement frame_sniffers reference count. > (objfpy_initialize): Create frame_sniffers list. > (objfpy_get_frame_sniffers): Implement Objfile.frame_sniffers > getter. > (objfpy_set_frame_sniffers): Implement Objfile.frame_sniffers > setter. > (objfile_getset): Add frame_sniffers attribute to Objfile. > * python/py-progspace.c (pspace_object): Add frame_sniffers field. > (pspy_dealloc): Decrement frame_sniffers reference count. > (pspy_initialize): Create frame_sniffers list. > (pspy_get_frame_sniffers): Implement gdb.Progspace.frame_sniffers > getter. > (pspy_set_frame_sniffers): Implement gdb.Progspace.frame_sniffers > setter. > (pspy_getset): Add frame_sniffers attribute to gdb.Progspace. > * python/py-unwind.c: New file, implements Python frame sniffers > interface. > * python/python-internal.h (pspy_get_name_sniffers): New prototype. > (objpy_get_frame_sniffers): New prototype. > (gdbpy_initialize_unwind): New prototype. > * python/python.c (gdbpy_apply_type_printers): Call > gdbpy_initialize_unwind. > * python/lib/gdb/__init__.py (packages): add frame_sniffers. > > 2014-12-12 Sasha Smundak > > * gdb.python/py-unwind.c: Test program for the py-unwind test. > * gdb.python/py-unwind.exp: Python frame sniffers test. > * gdb.python/py-unwind.py: Frame sniffer in Python tested by > py-unwind test. > Hi Alexander, I don't have much experience in this field, so I fail to see what problem it would help to solve. >From what I understand, with CPython, each PyEval_EvalFrameEx frame maps to one non-native (Python) frame. So it's easy to just filter out the others and tweak the output with a frame filter. Are you talking about other languages/VM where it's not as simple as this? Could you provide a more concrete example to illustrate the usefulness of the feature? Thanks! Simon