用gdb调试C++程序时打印变量的值

如果这个值是本地变量,那么没有任何的问题。gud-tooltip-mode也能正确显示。
不过如果是类里的成员,有的时候就麻烦了。
据我目前的观察,有的时候gdb可以正确的找到当前类的继承关系,可以直接使用this来访问相关信息:
p *this: 打印出当前类里所有的成员的值
p this->member: 打印出当前类里的某个成员的值
ptype this: 打印出当前类里所有的成员(原型)
whatis this: 打印出当前类的类型
如果set print object on的话,whatis this可以显示出当前类的真正类型,也就是衍生类的类型。

如果都能这样,那就太爽了。

可是有时候不是这样。不过我还没弄明白为什么会导致这种区别。
不过有个补救的方法。就是cast。
但是语法上有个地方要注意:
You must type
  (gdb) print ('Foo::Bar') x   instead of  (gdb) print (Foo::Bar) x
or
  (gdb) print ('Foo::Bar' *) y instead of  (gdb) print (Foo::Bar *) y
所以下面这样是可以的
 p (('namespace::Class') *this)->a.b.c
 p ('namespace::Class') *this

你可能感兴趣的:(c/c++基础,linux学习)