Using GDB 10.1, I set a watchpoint like this on std::array<Data, 1024> m_slots
:
(gdb) print &m_slots[0]
$1 = (std::array<Data, 1024>::value_type *) 0xdeadbeef
(gdb) watch *(Data*) 0xdeadbeef
where Data
is a struct
. GDB can print sizeof(Data) = 32
and successfully sets the (hardware) watchpoint. The watchpoint fires when the object is constructed/assigned for each field. The watchpoint does not fire when individual fields are updated otherwise. If instead I do either:
(gdb) watch -l m_slots[0]
or
(gdb) watch *(std::array<Data, 1024>::value_type *) 0xdeadbeef
then the watchpoint fires on changes to fields. It seems to me that std::array<Data, 1024>::value_type
is exactly Data
. Why is the behaviour different?
User contributions licensed under CC BY-SA 3.0