C++结构类型在GDB中的强制类型转换
来源:互联网 发布:淘宝全球购的入驻条件 编辑:程序博客网 时间:2024/06/06 07:45
今天在调试程序的过程中遇到的一个小问题,在这里记录一下,希望能对遇到同样问题的朋友有所帮助。
以下面的程序为例程进行说明:
class Base{public: Base(int nNum) : m_nNum(nNum) {} private: int m_nNum;}; class A : public Base{public: A(int nNum, char bCh) : Base(nNum), m_bCh(bCh) {} private: char m_bCh;}; namespace Test{ class Base { public: Base(int nNum) : m_nNum(nNum) {} private: int m_nNum; }; class A : public Base { public: A(int nNum, char bCh) : Base(nNum), m_bCh(bCh) {} private: char m_bCh; };} int main(){ Base * pObj1 = new A(10, 'A'); Test::Base * pObj2 = new Test::A(10, 'A'); delete pObj1; delete pObj2;}
相信只要有点C++基础的人都能够看懂上面的程序,如果看不懂的话,还是先回去学C++吧,嘿嘿!好了,言规正传,现在抛出问题:用gdb启动编译好的程序,在63行处设置断点,如何查看pObj1和pObj2的m_bCh的值?
1. 第一次尝试,直接p *pObj1,结果如下所示:
(gdb) p *pObj1$1 = { m_nNum = 10}
2. 由第一次尝试的结果,想到了强制类型转型,转换为子类A的指针类型,然后再print, 结果如下:
(gdb) p *(A*)pObj1 $3 = { Base = { m_nNum = 10 }, members of A: m_bCh = 65 'A'}这里便可以看到pObj1的m_bCh的值了。
3. 有了上面的经验,对于pObj2的m_bCh,就依上面2中的方法,直接上了,结果如下:(gdb) p *(Test::A*)pObj2A syntax error in expression, near `)pObj2'.汗啊,居然提示说是语法错误,于是在网上找啊找,终于找到了解决的方法。
4. 下面是找到的方法,说是带namespace的强制转型要加单引号的,好诡异的语法:(gdb) p *('Test::A'*)pObj2$5 = { test ::Base = { m_nNum = 10 }, members of Test::A: m_bCh = 65 'A'}通过上面一步步的介绍,相信读者朋友对GDB中结构类型的强制类型转换已经有了较为深入的了解,这里特别注意的就是第4步中提到的带namespace的结构类型,其它的跟C++基本中的类型的强制转换是一致的。
- C++结构类型在GDB中的强制类型转换
- C++结构类型在GDB中的强制类型转换(带namespace的强制转型要加单引号的)
- C中的类型强制转换
- [强制类型转换]C语言中的强制类型转换相关
- C语言中的强制类型转换
- 关于c语言中的强制类型转换
- C语言中的强制类型转换
- c++-----强制类型转换
- 【C++】强制类型转换
- C 强制类型转换
- C 强制类型转换
- C 强制类型转换
- 结构体类型强制转换
- 结构体类型强制转换
- 结构体强制类型转换
- c中结构体指针的强制类型转换
- C语言结构体的强制类型转换
- C++中的强制类型转换
- SSH web开发架构
- android实现界面底部的tab
- 补充:http的介绍
- 我自己的VIM配置(还没写完)
- iphone一些常用操作
- C++结构类型在GDB中的强制类型转换
- C与C++中定义结构体的不同方式
- 订餐系统总结(一)验证用户输入
- Android AsyncTask理解
- Cookie与Session的简单讨论
- poj 3322 Bloxorz I (BFS)
- C++设计模式之十八:Mementop(备忘录模式)
- 千姿百态项目经理3——“牛逼”项目经理2
- 在Hibernate中通過Oracle Function取得單據號碼