1. 程式人生 > >用gdb除錯C++程式時列印變數的值

用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