Bug 11380 - print formats (/FMT) do not invoke Python pretty printers
Summary: print formats (/FMT) do not invoke Python pretty printers
Status: RESOLVED WORKSFORME
Alias: None
Product: gdb
Classification: Unclassified
Component: python (show other bugs)
Version: 7.1
: P2 enhancement
Target Milestone: 7.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-03-15 22:49 UTC by Chris Johns
Modified: 2014-08-19 16:31 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Chris Johns 2010-03-15 22:49:09 UTC
If a /FMT is used with the print command a type's pretty printer is not invoked.
For example a pretty printer to print an RTEMS Object ID (an unsigned long)
produces:

(gdb) p /f the_semaphore->Object.id
$10 = to_string = {
  id = 436273170,
  node = 1,
  api = classic,
  class = semaphores,
  index = 18
}

and with a /FMT option added:

(gdb) p /c the_semaphore->Object.id
$15 = 18 '\022'
(gdb) p /f the_semaphore->Object.id
$16 = 2.66766316e-23
(gdb) p /u the_semaphore->Object.id
$17 = 436273170
(gdb) p /t the_semaphore->Object.id
$18 = 11010000000010000000000010010

It would be nice if the pretty printer followed the requested output where a
printer is creating a struct type output (display hint 'struct').
Comment 1 dje 2014-08-19 16:31:56 UTC
I guess this has been fixed since, because I can't repro this.
[btw, I'm assuming there's a typo in the repro instructions:
Is it possible the first "p /f the_semaphore->Object.id" was actually "p the_semaphore.Object" ?]

From the gdb build tree, after running the py-prettyprint.exp testcase:

bash$ make run
(gdb) file testsuite/gdb.python/py-prettyprint
(gdb) source ../src/gdb/testsuite/gdb.python/py-prettyprint.py
(gdb) start
[...]
264       string x = make_string ("this is x");
(gdb) n
265       zzz_type c = make_container ("container");
(gdb) 
266       zzz_type c2 = make_container ("container2");
(gdb) 
267       const struct string_repr cstring = { { "const string" } };
(gdb) 
277       nstype.elements = narray;
(gdb) 
278       nstype.len = 0;
(gdb) 
280       me.s = "blah";
(gdb) 
282       init_ss(&ss, 1, 2);
(gdb) 
283       init_ss(ssa+0, 3, 4);
(gdb) 
284       init_ss(ssa+1, 5, 6);
(gdb) 
285       memset (&nullstr, 0, sizeof nullstr);
(gdb) p ss
$1 = a=< a=<1> b=<0x7fffffffe670>> b=< a=<2> b=<0x7fffffffe680>>
(gdb) p/x ss
$2 = a=< a=<1> b=<0x7fffffffe670>> b=< a=<2> b=<0x7fffffffe680>>
(gdb) p/r ss
$3 = {
  a = {
    a = 0x1,
    b = 0x7fffffffe670
  },
  b = {
    a = 0x2,
    b = 0x7fffffffe680
  }
}
(gdb)