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').
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)