GDB, похоже, считает, что это нестатический член, поэтому вам потребуется экземпляр объекта для его получения.
Вы уверены , отметили ли вы этого участника класса как static
? Он должен быть статическим (специфичным для класса, а не для конкретного объекта), если вы хотите получить к нему доступ через класс.
С помощью следующей программы:
#include <iostream>
class xyzzy { public: int x; };
//int xyzzy::x = 7;
int main (void) {
xyzzy plugh;
plugh.x = 42;
std::cout << plugh.x << '\n';
return 0;
}
моя сессия похожа на вашу:
(gdb) b main
Breakpoint 1 at 0x80485cd: file qq.cpp, line 12.
(gdb) run
Starting program: /home/pax/qq
Breakpoint 1, main () at qq.cpp:12
12 plugh.x = 42;
(gdb) watch xyzzy::x
Cannot reference non-static field "x"
(gdb)
Но, когда я сделаю x
статическим и раскомментирую инициализатор, я получу более успешное:
(gdb) b main
Breakpoint 1 at 0x80485cd: file qq.cpp, line 6.
(gdb) run
Starting program: /home/pax/qq
Breakpoint 1, main () at qq.cpp:6
6 plugh.x = 42;
(gdb) watch xyzzy::x
Hardware watchpoint 2: xyzzy::x
Если вы хотите наблюдать за членом объекта (а не класса), вы должны подождать, пока он не будет подтвержден, например, с помощью:
#include <iostream>
class xyzzy { public: int x; };
int main (void) {
xyzzy plugh;
plugh.x = 42;
std::cout << plugh.x << '\n';
return 0;
}
и стенограмма:
(gdb) b main
Breakpoint 1 at 0x80485cd: file qq.cpp, line 5.
(gdb) run
Starting program: /home/pax/qq
Breakpoint 1, main () at qq.cpp:5
5 plugh.x = 42;
(gdb) watch plugh.x
Hardware watchpoint 2: plugh.x
(gdb)