This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug python/17152] New: when python pretty printer is used watch command prints new value in the old value filed


https://sourceware.org/bugzilla/show_bug.cgi?id=17152

            Bug ID: 17152
           Summary: when python pretty printer is used watch command
                    prints new value in the old value filed
           Product: gdb
           Version: 7.7
            Status: NEW
          Severity: normal
          Priority: P2
         Component: python
          Assignee: unassigned at sourceware dot org
          Reporter: skwllsp at gmail dot com

If no python pretty printer is used then my type unsigned char is correctly
printed:

Hardware watchpoint 2: value

Old value = "\000\000\000"
New value = "He\000"
0x0000003a1d889974 in memcpy () from /lib64/libc.so.6


When I use my own python pretty printer watch command prints new value in the
old value filed:

Hardware watchpoint 2: value

Old value = (72,101,0,0,)
New value = (72,101,0,0,)
0x0000003a1d889974 in memcpy () from /lib64/libc.so.6


Here is a test C++ program:
$ cat change_uchar_array4.cpp
#include <string.h>

unsigned char value[4];

int main()
{
  memcpy(value, "He",2);
  return 0;
}

Here is my python pretty printer:
$ cat my_uchar4_printer.py
class CustomPrinter(object):
    def __init__(self, val):
        self.val = val

    def to_string(self):
        res = '('
        for m in xrange(4):
          res += str(int(self.val[m])) + ","
        res += ')'
        return res

    def display_hint(self):
        return 'array'

def lookup_type (val):
    if str(val.type) == 'unsigned char [4]':
        return CustomPrinter(val)
    return None

gdb.pretty_printers.append (lookup_type)



$ gdb --version
GNU gdb (GDB) 7.7.1

Here the test itself:
$ gdb -q -x my_uchar4_printer.py  -ex "set pagination off" -ex "start" -ex
"watch value"  -ex "c"  ./change_uchar_array4
Reading symbols from ./change_uchar_array4...done.
Temporary breakpoint 1 at 0x4005a8: file change_uchar_array4.cpp, line 7.
Starting program: /home/change_uchar_array4

Temporary breakpoint 1, main () at change_uchar_array4.cpp:7
7         memcpy(value, "He",2);
Hardware watchpoint 2: value
Continuing.
Hardware watchpoint 2: value

Old value = (72,101,0,0,)
New value = (72,101,0,0,)
0x0000003a1d889974 in memcpy () from /lib64/libc.so.6

-- 
You are receiving this mail because:
You are on the CC list for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]