This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2010年04月17日 22:45 by loewis, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| add-conditions-for-gdb.Frame.select-to-trunk-003.patch | dmalcolm, 2010年04月19日 22:53 | |||
| test_gdb.txt | loewis, 2010年04月20日 20:01 | |||
| Messages (25) | |||
|---|---|---|---|
| msg103442 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月17日 22:45 | |
I get a number of failures in test_gdb with gdb 7.0.1 about gdb.Frame, e.g. FAIL: test_basic_command (test.test_gdb.PyListTests) Verify that the "py-list" command works ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/martin/work/27/Lib/test/test_gdb.py", line 538, in test_basic_command cmds_after_breakpoint=['py-list']) File "/home/martin/work/27/Lib/test/test_gdb.py", line 111, in get_stack_trace self.assertEquals(err, '') AssertionError: "Error occurred in Python command: 'gdb.Frame' object has no attribute 'function'\n" != '' |
|||
| msg103443 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月17日 22:51 | |
See my msg103440 of issue #8279. |
|||
| msg103444 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月17日 23:02 | |
According to documentation of the Python API of gdb, a frame has a function method. I read gdb 7.0, 7.0.1 and 7.1 (downloaded from http://ftp.gnu.org/gnu/gdb): there is not "function" method, but a "name" method. On my Debiand Sid (gdb 7.1), gdb has the name method, but not the function method. Can we use frame.name() instead of frame.function().name on any OS and all gdb 7.x versions? |
|||
| msg103453 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月17日 23:32 | |
The commit creating methods "function", "select" were added the 24th february 2010, whereas gdb 7.1 was released around the 18th february 2010. http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/python/py-frame.c?cvsroot=src I guess that the author (Dave Malcolm?) of the is_evalframeex() method in Tools/gdb/libpython.py uses the HEAD version of GDB. About the select() method, Dave added the following comment to its Frame wrapper: --- def select(self): '''If supported, select this frame and return True; return False if unsupported Not all builds have a gdb.Frame.select method; seems to be present on Fedora 12 onwards, but absent on Ubuntu buildbot''' --- gdb in Fedora 12 is based on 7.0.1 plus a lot of patches. But I don't see a patch added the select() method to the Python API: http://cvs.fedoraproject.org/viewvc/rpms/gdb/F-12/ |
|||
| msg103463 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月18日 05:44 | |
Victor, please leave that to David. He will fix it. |
|||
| msg103644 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月19日 22:03 | |
If I'm reading this bug correctly, there are two issues here: (A) that we shouldn't use gdb.Frame.function.name(), and should instead use gdb.Frame.name(). I believe this is a duplicate of issue 8279, and that this was fixed in trunk in r80156. It hasn't yet been fixed in the py3k branch; the patch from r80156 does appear to apply cleanly there. (B) That different builds of gdb may or may not have gdb.Frame.select. I'm attaching a patch to trunk which tries to autodetect whether the gdb.Frame.select method is present. The "py-up" and "py-down" commands and their selftest (StackNavigationTests) are made conditional upon this. > gdb in Fedora 12 is based on 7.0.1 plus a lot of patches. But I don't see a patch added the > select() method to the Python API: > http://cvs.fedoraproject.org/viewvc/rpms/gdb/F-12/ FWIW, the relevant patch is this one: http://cvs.fedoraproject.org/viewvc/rpms/gdb/F-12/gdb-archer.patch?revision=1.40&view=markup (search for "frapy_select" within that patch); as I understand it this generating from the git repository used by the team that created the Python support within gdb, and as such it's a snapshot of work, much of which is now in upstream gdb's CVS repository. |
|||
| msg103645 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月19日 22:04 | |
Assigning to loewis for review |
|||
| msg103649 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月19日 22:26 | |
> (A) that we shouldn't use gdb.Frame.function.name(), ... > that this was fixed in trunk in r80156. This command is not correct: it still calls .function() method: def is_evalframeex(self): '''Is this a PyEval_EvalFrameEx frame?''' if self._gdbframe.function(): if self._gdbframe.name() == 'PyEval_EvalFrameEx': Call to self._gdbframe.function() can be removed. > The "py-up" and "py-down" commands and their selftest > (StackNavigationTests) are made conditional upon this. It's not enough, test_print_after_up() and test_locals_after_up() require also py-up command. Attached patch is based on add-conditions-for-gdb.Frame.select-to-trunk.patch and fix described problems. Using test_gdb-2.patch, test_gdb pass without any error on my Debian Sid (gdb 7.1). |
|||
| msg103652 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月19日 22:37 | |
> Attached patch is based on add-conditions-for-gdb.Frame.select-to- > trunk.patch and fix described problems. Using test_gdb-2.patch, test_gdb > pass without any error on my Debian Sid (gdb 7.1). The patch conditionalizes each test within StackNavigationTests, but then drops it from the list of classes at the end. Looks like it needs to be reinstated. |
|||
| msg103654 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月19日 22:53 | |
Sorry about that. Here's an updated version of the patch, combining my work with Victor's. |
|||
| msg103658 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月19日 23:13 | |
test_gdb pass with add-conditions-for-gdb.Frame.select-to-trunk-003.patch. In a new patch, or maybe a last version of the add-.... patch, could you move all "main" code at the end? I found these instructions: ---- # register Python pretty printer register (gdb.current_objfile()) # register commands PyList() if hasattr(gdb.Frame, 'select'): # Not all builds of gdb have gdb.Frame.select PyUp() PyDown() PyBacktrace() PyPrint() PyLocals() ---- Could you also document how libpython.py is loaded automatically, and can I load it manually? Anyway, thanks for libpython: it really rocks! I often use gdb with Misc/gdbinit, but pystack does not always work, and pyo crashs if Python is not yet initialized. It will be easier to improve the gdb scripting if it's written in Python! |
|||
| msg103669 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月20日 05:34 | |
Folks, can we please focus at one issue at a time? I'm not sure I understand the issue that this patch is supposed to fix; in any case, I can report that it doesn't fix *this* issue. I'm still getting the very same failures after applying the patch. Victor, please don't hijack existing bug reports for new issues. If you have a new issue, create a new bug report. They are really cheap to get :-) |
|||
| msg103677 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月20日 06:44 | |
> I'm not sure I understand the issue that this patch is supposed > to fix It should fix all test_gdb errors :-) > in any case, I can report that it doesn't fix *this* issue. > I'm still getting the very same failures after applying the patch. The "'gdb.Frame' object has no attribute 'function'" error? Could you copy/paste the output of test_gdb? -- Sorry for the issue hijaking, I will open a new issue ;-) |
|||
| msg103742 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月20日 20:01 | |
I'm attaching the full output. It's the same as the one in the original report (msg103442) still. |
|||
| msg103758 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月20日 21:00 | |
> in any case, I can report that it doesn't fix *this* issue Did you applied the patch version 3? The first version didn't fixed is_evalframeex(), but the version 3 does. Could you retry with the last patch (version 3)? |
|||
| msg103765 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月20日 21:08 | |
Yes, I did try with version 3. |
|||
| msg103773 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2010年04月20日 21:44 | |
The patch does make a slight difference for me - I go from 14 failures down to 8 failures and 6 skipped. The post-patch failures appear to be the same ones Martin is getting: "test_gdb.get_stack_trace" is regularly failing due to the lack of "gdb.Frame.function". |
|||
| msg103776 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月20日 21:48 | |
I don't understand because after applying the patch, there is not occurence of ".function" in Tools/gdb/libpython.py nor Lib/test/test_gdb.py. Do you have an old python-gdb.py file in your Python root directory? I noticed that I had such file in my python trunk checkout and py3k checkout. This file was maybe renamed to Tools/gdb/libpython.py? What is your OS and gdb versions? |
|||
| msg103780 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2010年04月20日 22:02 | |
> Do you have an old python-gdb.py file in your Python root directory? Ah, ok. That was the problem indeed. The patch actually works fine. |
|||
| msg103781 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2010年04月20日 22:09 | |
Ah, yep - "rm python-gdb.py", "make" cleared up those remaining ".function" failures. The makefile could probably use a Modules/Setup.dist vs Modules/Setup style warning when libpython.py is newer than python-gdb.py to help prevent anyone else getting caught by that. I still get one failure after that, even after a "make clean", "make", "./python -m test.regrtest -v test_gdb". Given the "unable to read Python frame information" embedded in the result on my machine (64-bit Kubuntu 9.10), it is probably related to the current issue. The remaining failure: ====================================================================== FAIL: test_basic_command (test.test_gdb.PyBtTests) Verify that the "py-bt" command works ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/ncoghlan/devel/python/Lib/test/test_gdb.py", line 638, in test_basic_command ''') File "/home/ncoghlan/devel/python/Lib/test/test_gdb.py", line 158, in assertMultilineMatches msg='%r did not match %r' % (actual, pattern)) AssertionError: 'Breakpoint 1 at 0x453510: file Objects/object.c, line 330.\n[Thread debugging using libthread_db enabled]\n\nBreakpoint 1, PyObject_Print (op=42, fp=0x7ffff7532780, flags=1)\n at Objects/object.c:330\n330\t\treturn internal_print(op, fp, flags, 0);\n#3 Frame 0x808680, for file /home/ncoghlan/devel/python/Lib/test/gdb_sample.py, line 10, in baz (args=(1, 2, 3))\n print(42)\n#7 (unable to read python frame information)\n#10 Frame 0x81a220, for file /home/ncoghlan/devel/python/Lib/test/gdb_sample.py, line 7, in bar (a=1, b=2, c=3)\n baz(a, b, c)\n#13 Frame 0x807f00, for file /home/ncoghlan/devel/python/Lib/test/gdb_sample.py, line 4, in foo (a=1, b=2, c=3)\n bar(a, b, c)\n' did not match '^.*\n#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 7, in bar \\(a=1, b=2, c=3\\)\n baz\\(a, b, c\\)\n#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 4, in foo \\(a=1, b=2, c=3\\)\n bar\\(a, b, c\\)\n#[0-9]+ Frame 0x[0-9a-f]+, for file .*gdb_sample.py, line 12, in <module> \\(\\)\nfoo\\(1, 2, 3\\)\n' |
|||
| msg103784 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月20日 22:21 | |
In msg103780 Martin v. Löwis wrote: > Ah, ok. That was the problem indeed. The patch actually works fine. Good to hear. Thanks for tracking this down and clarifying it. As I understand it, the current status of this bug is that file17000 fixes the reported issue, but hasn't yet been applied to trunk. In msg103781 Nick Coghlan wrote: > I still get one failure after that, even after a "make clean", "make", > "./python -m test.regrtest -v test_gdb". Given the "unable to read > Python frame information" embedded in the result on my machine (64-bit > Kubuntu 9.10), it is probably related to the current issue. I believe this is a different issue; please can you open a separate bug about this. Reading the frame information seems to be highly sensitive to the optimization level and the exact version of gcc for the build, and the exact version of gdb, alas. I've been tracking a failure like the one you describe, seen on 64-bit with Fedora in our downstream tracker here: https://bugzilla.redhat.com/show_bug.cgi?id=556975 |
|||
| msg103786 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年04月20日 22:34 | |
Fixed: r80289 (trunk), r80290 (py3k). I will check the buildbots :-) Nick: Can you open a new issue for your last issue? I will open a new issue for my suggestions. I also realized that gdb is missing in the documentation! |
|||
| msg103789 - (view) | Author: Dave Malcolm (dmalcolm) (Python committer) | Date: 2010年04月20日 22:52 | |
> Fixed: r80289 (trunk), r80290 (py3k). I will check the buildbots :-) Please forgive my pedantry, but these appear to be off-by-one; the commits appear to have been: r80288 (trunk), r80289 (py3k) |
|||
| msg103811 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2010年04月21日 10:18 | |
Remaining problem recorded as issue 8482 |
|||
| msg103814 - (view) | Author: Alyssa Coghlan (ncoghlan) * (Python committer) | Date: 2010年04月21日 10:24 | |
(Oops, thought I had reverted those accidental edits by reloading the page. I guess not) |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:00 | admin | set | github: 52684 |
| 2010年04月21日 10:24:13 | ncoghlan | set | keywords:
+ patch, - 64bit messages: + msg103814 |
| 2010年04月21日 10:18:13 | ncoghlan | set | versions:
+ Python 2.7 nosy: loewis, doko, ncoghlan, vstinner, dmalcolm messages: + msg103811 components: + Library (Lib), Tests keywords: + 64bit, - patch |
| 2010年04月20日 22:52:11 | dmalcolm | set | messages: + msg103789 |
| 2010年04月20日 22:34:52 | vstinner | set | status: open -> closed resolution: fixed messages: + msg103786 |
| 2010年04月20日 22:22:00 | dmalcolm | set | messages: + msg103784 |
| 2010年04月20日 22:09:25 | ncoghlan | set | messages: + msg103781 |
| 2010年04月20日 22:02:35 | loewis | set | messages: + msg103780 |
| 2010年04月20日 21:48:53 | vstinner | set | messages: + msg103776 |
| 2010年04月20日 21:44:03 | ncoghlan | set | messages: + msg103773 |
| 2010年04月20日 21:08:50 | loewis | set | messages: + msg103765 |
| 2010年04月20日 21:00:56 | vstinner | set | messages: + msg103758 |
| 2010年04月20日 20:02:00 | loewis | set | files:
+ test_gdb.txt messages: + msg103742 |
| 2010年04月20日 17:06:23 | vstinner | set | files: - test_gdb-2.patch |
| 2010年04月20日 17:06:19 | vstinner | set | files: - add-conditions-for-gdb.Frame.select-to-trunk.patch |
| 2010年04月20日 15:54:28 | doko | set | nosy:
+ doko |
| 2010年04月20日 06:44:45 | vstinner | set | messages: + msg103677 |
| 2010年04月20日 05:34:08 | loewis | set | messages: + msg103669 |
| 2010年04月19日 23:13:08 | vstinner | set | messages: + msg103658 |
| 2010年04月19日 22:53:50 | dmalcolm | set | files:
+ add-conditions-for-gdb.Frame.select-to-trunk-003.patch messages: + msg103654 |
| 2010年04月19日 22:37:23 | dmalcolm | set | messages: + msg103652 |
| 2010年04月19日 22:26:30 | vstinner | set | files:
+ test_gdb-2.patch messages: + msg103649 |
| 2010年04月19日 22:04:42 | dmalcolm | set | assignee: dmalcolm -> loewis messages: + msg103645 stage: patch review |
| 2010年04月19日 22:03:49 | dmalcolm | set | files:
+ add-conditions-for-gdb.Frame.select-to-trunk.patch keywords: + patch messages: + msg103644 |
| 2010年04月18日 05:44:08 | loewis | set | messages: + msg103463 |
| 2010年04月17日 23:32:21 | vstinner | set | messages: + msg103453 |
| 2010年04月17日 23:02:03 | vstinner | set | messages: + msg103444 |
| 2010年04月17日 22:51:23 | vstinner | set | messages: + msg103443 |
| 2010年04月17日 22:45:07 | loewis | create | |