2019年1月25日 星期五

gdb 顯示 polymorphic type (derived type) 的方法

C++ 中有 polymorphism 的功能
可以讓我們用同一個型別的 pointer 產生不同的功能
然而在 debug 這樣的 code 因為 pointer 是同一種
會產生理解上的困難

因為
如同全球最大工程師社交網站中這篇的建議
我們可以使用一些方法讓 gdb 顯示真正的型別
(gdb) set print object
(gdb) ptype base_pointer
缺點就是會把整個 class 印出來
如果稍微找看看文件,可以這樣做只印出 class member
(gdb) ptype/m base_ptr
進一步 google 發現有 whatis 這種東西能用
# before set print object
(gdb) whatis base_ptr
type = Base *

# after set print object
(gdb) whatis base_ptr
type = /* real type = Derive */
Base *
對於只需要在 debug 時看到 type 的應該是最符合需求的了

更正:
好像只要 set print object 的之後
一般的 print 就會告訴你這個是什麼型別了
ptype, whatis 都是不需要的 XD

沒有留言:

張貼留言