* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
@ 2009-09-14 9:20 ` pmuldoon at redhat dot com
2009-09-14 11:47 ` pmuldoon at redhat dot com
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-14 9:20 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From pmuldoon at redhat dot com 2009-09-14 09:20 -------
I took a very brief look at this bug this morning. The reason the std::string
printer is not respecting the "set print element n" directive is that it does
not implement a children(self ...) function. It returns the contents of the
std::string in the to_string(self) pretty printer api.
The elements length code is only checked in the print_children function within
py-prettyprint.c, and so this code immediately returns:
if (! PyObject_HasAttr (printer, gdbpy_children_cst))
return;
Whether std::string should treat each character as a child, or the parent
to_string() should respect options->print_max, I'm not sure. (Though I can't see
a workable solution with to_string gated by print_max, as that would also affect
all kinds of helper/descriptive text that is not a part of the actual value)
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
2009-09-14 9:20 ` [Bug python/10633] " pmuldoon at redhat dot com
@ 2009-09-14 11:47 ` pmuldoon at redhat dot com
2009-09-14 12:41 ` pmuldoon at redhat dot com
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-14 11:47 UTC (permalink / raw)
To: gdb-prs
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |pmuldoon at redhat dot com
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
2009-09-14 9:20 ` [Bug python/10633] " pmuldoon at redhat dot com
2009-09-14 11:47 ` pmuldoon at redhat dot com
@ 2009-09-14 12:41 ` pmuldoon at redhat dot com
2009-09-14 13:15 ` pmuldoon at redhat dot com
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-14 12:41 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From pmuldoon at redhat dot com 2009-09-14 12:41 -------
Comment #2 is a complete red herring, sorry for going off half-cocked!
print cs observes the options->print_max as follows.
in val_print_string
1410 fetchlimit = (len == -1 ? options->print_max : min (len,
options->print_max));
1412 errcode = read_string (addr, len, width, fetchlimit, byte_order,
And then LA_PRINT_STRING is called with read results length of that call (which
will always be gated with fetchlimit, which is always gated with print_max).
But in print_string_repr in py-prettyprint.c we don't pay attention to
options->print_max before we call LA_PRINT_STRING:
if (hint && !strcmp (hint, "string"))
LA_PRINT_STRING (stream, builtin_type (gdbarch)->builtin_char,
output, len, 0, options);
I'm not sure why the function pointed to (in this case c_printstr in c-lang.c)
does not gate the string print. But there you have it
--
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (2 preceding siblings ...)
2009-09-14 12:41 ` pmuldoon at redhat dot com
@ 2009-09-14 13:15 ` pmuldoon at redhat dot com
2009-09-15 13:29 ` pmuldoon at redhat dot com
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-14 13:15 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From pmuldoon at redhat dot com 2009-09-14 13:15 -------
Created an attachment (id=4195)
--> (http://sourceware.org/bugzilla/attachment.cgi?id=4195&action=view)
Rough patch limiting string print to options->print_max
Something like this patch would limit the fetch. If this is acceptable, I'll
submit a full patch with regression test.
--
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (3 preceding siblings ...)
2009-09-14 13:15 ` pmuldoon at redhat dot com
@ 2009-09-15 13:29 ` pmuldoon at redhat dot com
2009-09-15 13:30 ` pmuldoon at redhat dot com
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-15 13:29 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From pmuldoon at redhat dot com 2009-09-15 13:29 -------
After looking at this again this afternoon, looks like this is a bug in
c-lang.c:c_printstr after all. Attempt 3 .. ;)
I'm not sure why val_print pre-sized the string to conform with print_max before
passing it to LA_PRINT_STRING, but it just happened to do so. Anyway, not so
important. But from reading the code LA_PRINT_STRING should respect print_max in
all cases. So cases like print_string_repr which do not do any form of pre-size
check with print_max can happily rely on LA_PRINT_STRING to enforce it. In the
current code's case, the code has two loops. One outer which does gate on
print_max, and one inner which doesn't. So the inner loop races past the check,
as far as I can tell. I added a check to the inner loop, and this prints string
to the print_max size, and does the right thing with ellipses too. It passes all
tests in the testsuite.
git diff c-lang.c
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index 83a7382..515685a 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -459,7 +459,7 @@ c_printstr (struct ui_file *stream, struct type *type, const
gdb_byte *string,
single character in isolation. This makes the code simpler
and probably does the sensible thing in the majority of
cases. */
- while (num_chars == 1)
+ while (num_chars == 1 && things_printed < options->print_max)
{
/* Count the number of repetitions. */
unsigned int reps = 0;
--
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (4 preceding siblings ...)
2009-09-15 13:29 ` pmuldoon at redhat dot com
@ 2009-09-15 13:30 ` pmuldoon at redhat dot com
2009-09-21 9:40 ` cvs-commit at gcc dot gnu dot org
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-15 13:30 UTC (permalink / raw)
To: gdb-prs
--
What |Removed |Added
----------------------------------------------------------------------------
Attachment #4195 is|0 |1
obsolete| |
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (5 preceding siblings ...)
2009-09-15 13:30 ` pmuldoon at redhat dot com
@ 2009-09-21 9:40 ` cvs-commit at gcc dot gnu dot org
2009-09-21 10:25 ` cvs-commit at gcc dot gnu dot org
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2009-09-21 9:40 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2009-09-21 09:40 -------
Subject: Bug 10633
CVSROOT: /cvs/src
Module name: src
Changes by: pmuldoon@sourceware.org 2009-09-21 09:39:53
Modified files:
gdb : ChangeLog c-lang.c
gdb/testsuite : ChangeLog
gdb/testsuite/gdb.python: py-prettyprint.exp
Log message:
2009-09-21 Phil Muldoon <pmuldoon@redhat.com>
PR python/10633
* c-lang.c (c_printstr): Do not loop past options->print_max when
iterating with wchar_iterate.
2009-09-21 Phil Muldoon <pmuldoon@redhat.com>
PR python/10633
* gdb.python/py-prettyprint.exp (gdb_py_test_silent_cmd): New
Function.
(run_lang_tests): Add print elements test.
Patches:
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.10890&r2=1.10891
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/c-lang.c.diff?cvsroot=src&r1=1.75&r2=1.76
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.1962&r2=1.1963
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.python/py-prettyprint.exp.diff?cvsroot=src&r1=1.1&r2=1.2
--
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (6 preceding siblings ...)
2009-09-21 9:40 ` cvs-commit at gcc dot gnu dot org
@ 2009-09-21 10:25 ` cvs-commit at gcc dot gnu dot org
2009-09-21 11:11 ` pmuldoon at redhat dot com
2009-09-21 11:12 ` pmuldoon at redhat dot com
9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2009-09-21 10:25 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2009-09-21 10:25 -------
Subject: Bug 10633
CVSROOT: /cvs/src
Module name: src
Branch: gdb_7_0-branch
Changes by: pmuldoon@sourceware.org 2009-09-21 10:25:30
Modified files:
gdb : ChangeLog c-lang.c
gdb/testsuite : ChangeLog
gdb/testsuite/gdb.python: py-prettyprint.exp
Log message:
2009-09-21 Phil Muldoon <pmuldoon@redhat.com>
PR python/10633
* c-lang.c (c_printstr): Do not loop past options->print_max when
iterating with wchar_iterate.
2009-09-21 Phil Muldoon <pmuldoon@redhat.com>
PR python/10633
* gdb.python/py-prettyprint.exp (gdb_py_test_silent_cmd): New
Function.
(run_lang_tests): Add print elements test.
Patches:
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_0-branch&r1=1.10874.2.13&r2=1.10874.2.14
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/c-lang.c.diff?cvsroot=src&only_with_tag=gdb_7_0-branch&r1=1.75&r2=1.75.4.1
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&only_with_tag=gdb_7_0-branch&r1=1.1960.2.1&r2=1.1960.2.2
http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.python/py-prettyprint.exp.diff?cvsroot=src&only_with_tag=gdb_7_0-branch&r1=1.1&r2=1.1.2.1
--
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (7 preceding siblings ...)
2009-09-21 10:25 ` cvs-commit at gcc dot gnu dot org
@ 2009-09-21 11:11 ` pmuldoon at redhat dot com
2009-09-21 11:12 ` pmuldoon at redhat dot com
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-21 11:11 UTC (permalink / raw)
To: gdb-prs
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at sourceware dot|pmuldoon at redhat dot com
|org |
Status|NEW |ASSIGNED
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug python/10633] std::string pretty printer should respect 'print elements' limit
2009-09-12 0:37 [Bug python/10633] New: std::string pretty printer should respect 'print elements' limit ppluzhnikov at google dot com
` (8 preceding siblings ...)
2009-09-21 11:11 ` pmuldoon at redhat dot com
@ 2009-09-21 11:12 ` pmuldoon at redhat dot com
9 siblings, 0 replies; 11+ messages in thread
From: pmuldoon at redhat dot com @ 2009-09-21 11:12 UTC (permalink / raw)
To: gdb-prs
------- Additional Comments From pmuldoon at redhat dot com 2009-09-21 11:12 -------
Commited to cvs head, and to gdb 7.0 branch
--
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://sourceware.org/bugzilla/show_bug.cgi?id=10633
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
^ permalink raw reply [flat|nested] 11+ messages in thread